POJ 2105 IP Address

简介: Problem Description Suppose you are reading byte streams from any device, representing IP addresses.

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

int main(){
    int n;
    scanf("%d",&n);getchar();
    while(n--){
        char str[35];
        int i;
        gets(str);
       // for(i=0;i<32;i++)
         //   scanf("%c",&str[i]);
        int sum[4];
        int j;
        //printf("!!!\n");
        for(int j=3;j>=0;j--){
                sum[j]=0;
            for(i=1;i<=8;i++){
                if(str[(j+1)*8-i]=='1'){
                    sum[j]+=pow(2,i-1);
                /**printf("sum[%d]=%d\n",j,sum[j]);putchar(str[(j+1)*8-i]);
                putchar(10);**/
                }
            }
        }
        printf("%d.%d.%d.%d\n",sum[0],sum[1],sum[2],sum[3]);
        for(i=0;i<4;i++)
            sum[i]=0;
    }
    return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int a[8]={1,2,4,8,16,32,64,128};
int main(){
    int n;
    scanf("%d",&n);
    while(n--){
        char str[35];



            scanf("%s",str);
        int i,sum[5],j=0;
        for(i=31;i>=0;i--){
            if(i%8==7){
                sum[++j]=0;
            }
            if(str[i]=='1'){
                sum[j]+=a[7-i%8];
            }
        }
        printf("%d.%d.%d.%d\n",sum[4],sum[3],sum[2],sum[1]);
    }
}

目录
相关文章
poj 2105 IP Address
题目链接
28 0
|
6月前
|
网络架构 开发者
[POJ 1236] Network of Schools | Tarjan缩点
Description A number of schools are connected to a computer network. Agreements have been developed among those schools: each school maintains a list of schools to which it distributes software (the “receiving schools”).
137 0
[POJ 1236] Network of Schools | Tarjan缩点
POJ 2105 IP Address
POJ 2105 IP Address
116 0
|
JavaScript 前端开发
|
网络协议
|
网络协议