一个 IP 地址是用四个字节(每个字节 8 个位)的二进制码组成。请将 32 位二进制码表示的 IP 地址转换为十进制格式表示的 IP 地址输出。
输入格式:
输入在一行中给出 32 位二进制字符串。
输出格式:
在一行中输出十进制格式的 IP 地址,其由 4 个十进制数组成(分别对应 4 个 8 位的二进制数),中间用 “.” 分隔开。
输入样例:
11001100100101000001010101110010
输出样例:
204.148.21.114
来源:
来源:PTA | 程序设计类实验辅助教学平台
链接:https://pintia.cn/problem-sets/13/exam/problems/543
提交:
题解:
#include<stdio.h>
#include<math.h>
int main(void) {
// 32 位 IP 地址二进制字符串
char ipStr[32];
scanf("%s", ipStr);
// ip 地址的四位数字:num1.num2.num3.num4
int num1 = 0;
int num2 = 0;
int num3 = 0;
int num4 = 0;
// 每八位二进制数组成一位 IP 地址,按权相乘求和
int index = 7;
for (int i = 0; i < 32; i++) {
int num = (ipStr[i] - '0');
if (i >= 0 && i < 8) {
num1 += num * (int) pow(2, index);
} else if (i >= 8 && i < 16) {
num2 += num * (int) pow(2, index);
} else if (i >= 16 && i < 24) {
num3 += num * (int) pow(2, index);
} else if (i >= 24 && i < 32) {
num4 += num * (int) pow(2, index);
}
index = --index < 0 ? 7 : index;
}
printf("%d.%d.%d.%d", num1, num2, num3, num4);
return 0;
}