一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。
输入格式:
输入在一行中给出32位二进制字符串。
输出格式:
在一行中输出十进制格式的IP地址,其由4个十进制数组成(分别对应4个8位的二进制数),中间用“.”分隔开。
输入样例:
11001100100101000001010101110010
输出样例:
204.148.21.114
#include<stdio.h>
#include<string.h>
#include<math.h>
int main(){
//数组a存的是字符,而数组b存的是数字
char a[33];
int b[5];
char ch;
//获取32位IP地址的二进制(字符形式)
for(int i=0;i<32;i++){
ch=getchar();
a[i]=ch;
}
int sum=0;
int cnt=0;
int k=0;
//倒着循环,方便对二进制数做2的0次方,1次方,2次方...依次相加的操作
for(int i=31;i>=0;i--){
if(a[i]=='1'){
sum+=pow(2,cnt);
}
cnt++;
//cnt能被8整除的时候说明已经遍历了8个数了,这时候cnt=0重新下一个8位数的循环
if(cnt%8==0){
//依次把b[0],b[1],b[2],b[3]赋值(注意,对应的是32位IP地址的倒序)
b[k]=sum;
k++;
cnt=0;
//一定要记得初始化sum
sum=0;
}
}
//因为b[0],b[1],b[2],b[3]是32位IP地址的倒序,所以逆序输出
for(int i=3;i>=0;i--){
printf("%d",b[i]);
if(i!=0){
printf(".");
}
}
}