“可以适用ascll值相减,可以省用转换函数。例如 m[i]-'0' 得出2进制的值”
一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。
输入格式:
输入在一行中给出32位二进制字符串。
输出格式:
在一行中输出十进制格式的IP地址,其由4个十进制数组成(分别对应4个8位的二进制数),中间用“.”分隔开。
输入样例:
11001100100101000001010101110010
结尾无空行
输出样例:
204.148.21.114
结尾无空行
#include <stdio.h>
#include <stdlib.h>
int main()
{
char m[33]="";
char a[9], b[9], c[9], d[9];
int i=0,j=0;
int A, B, C, D;
int a_;
int shift(int x);
scanf("%s", m);
for (i = 0; i < 8; i++, j++)
{
a[i] = m[j];
}
for (i = 0; i < 8; i++, j++)
{
b[i] = m[j];
}
for (i = 0; i < 8; i++, j++)
{
c[i] = m[j];
}
for (i = 0; i < 8; i++, j++)
{
d[i] = m[j];
}
A = atoi(a);
B = atoi(b);
C = atoi(c);
D = atoi(d);
A = shift(A);
B = shift(B);
C = shift(C);
D = shift(D);
printf("%d.%d.%d.%d\n", A, B, C, D);
return 0;
}
int shift(int x)
{
int sum=0;
int i,j,k=1;
for (i = 0; i < 8; i++)
{
j=x % 10;
x /= 10;
sum += j * k;
k *= 2;
}
return sum;
}