您的位置:首页 > 编程语言 > PHP开发

HUNAN UNIVERSITY ACM/ICPC Judge Online —— Problem 10049 IP Address

2007-03-20 12:55 447 查看
这次注意到了两个问题:首先是连续输入二进制数的时候使用整型的数组是不方便的,所以后来改用了char。第二就是char型数组需要预留一个元素用来存储'/0'的结束字符,我之前的几次提交失败的原因就是在这。

问题描述:

IP Address 
Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KB 
Total submit users: 405, Accepted users: 388 
Problem 10049 : No special judgement 
Problem description
Suppose you are reading byte streams from any device, representing IP addresses. Your task is to convert a 32 characters long sequence of '1s' and '0s' (bits) to a dotted decimal format. A dotted decimal format for an IP address is form by grouping 8 bits at a time and converting the binary representation to decimal representation. Any 8 bits is a valid part of an IP address. To convert binary numbers to decimal numbers remember that both are positional numerical systems, where the first 8 positions of the binary systems are:

27 26 25 24 23 22 21 20 128 64 32 16 8 4 2 1

 
Input
The input will have a number N (1<=N<=9) in its first line representing the number of streams to convert. N lines will follow.

 
Output
The output must have N lines with a doted decimal IP address. A dotted decimal IP address is formed by grouping 8 bit at the time and converting the binary representation to decimal representation.

 
Sample Input
4
00000000000000000000000000000000
00000011100000001111111111111111
11001011100001001110010110000000
01010000000100000000000000000001
 
Sample Output
0.0.0.0
3.128.255.255
203.132.229.128
80.16.0.1
 
Problem Source
MCA 2004

 
Submit   Discuss   Judge Status  Problems  Ranklist  

三次提交AC!


// 10049.cpp : Defines the entry point for the console application.


//




//#include "stdafx.h"


#include <iostream.h>


#include <math.h>


//using namespace std;




int OutIP[9][4];




void ChangeToIp(const char Temp[],int j)




...{


    for(int x=0;x<4;x++)




    ...{


        int temp=0;


        for(int y=0;y<8;y++)




        ...{


            if(Temp[8*x+y]=='1')


                temp+=1*pow(2,7-y);


            else //if(Temp[8*x+y]=='1')


                temp+=0*pow(2,7-y);


        }


        OutIP[j][x]=temp;


    }


}


 


int main()




...{


    int N=0;


    cin>>N;


    


    if((N>0&&N<10)!=1)


        return 0;




    char TempIn[33];


    for(int i=0;i<N;i++)




    ...{


        cin>>TempIn;


        ChangeToIp(TempIn,i);


    }




    for(int a=0;a<N;a++)




    ...{


        cout<<OutIP[a][0]<<"."<<OutIP[a][1]<<"."<<OutIP[a][2]<<"."<<OutIP[a][3]<<endl;


    }




//    cout<<TempIn<<endl;


    return 0;


}



 

附上“马牛不是人”的解法:

/*start 17:43*/
/*end 18:08  25min*/
#include <stdio.h>
#include <string.h>

main()
{
      int n,i,j,p,dec=0;
      char s[32];
      scanf("%d",&n);     
      
      for( i = 0 ; i < n ; i++ ){
           scanf("%s",s);
           for( j = 0,p = 7 ; j < 32 ; j++,p--){

  
                    if(s[j]=='1')dec+=pow(2,p);    
                    if( p == 0 ){
                        p=8;
                        printf("%d",dec);
                        dec=0;
                        if(j == 31)printf(" ");
                        else printf(".");
                    }  
 
                
           }
      }
      
      system("PAUSE");
}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息