[PTA]实验8-2-10 IP地址转换
Posted Spring-_-Bear
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PTA]实验8-2-10 IP地址转换相关的知识,希望对你有一定的参考价值。
一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。
输入格式:
输入在一行中给出32位二进制字符串。
输出格式:
在一行中输出十进制格式的IP地址,其由4个十进制数组成(分别对应4个8位的二进制数),中间用“.”分隔开。
输入样例:
11001100100101000001010101110010
输出样例:
204.148.21.114
- 提交结果:
- 源码:
#include<stdio.h>
#include<math.h>
int main(void)
{
char ipStr[32]; // 输入的二进制字符串
int Ip[33]; // Ip[0]不使用,将输入的字符串转化为对应的整型数组
scanf("%s", ipStr);
// 将输入的字符串转化为对应的整型数组,从Ip[1]到Ip[32]
for (int i = 0; i < 32; i++)
{
Ip[i + 1] = ipStr[i] - '0';
}
// Ip地址的四位:num1.num2.num3.num4
int num1, num2, num3, num4;
num1 = num2 = num3 = num4 = 0;
// 每八位二进制数组成一位IP地址,按权相乘求和
int index = 7;
for (int i = 1; i <= 32; i++)
{
// 第一段,得第一个ip地址,下同
if (i >= 1 && i <= 8)
{
num1 += Ip[i] * pow(2, index);
}
else if (i >= 9 && i <= 16)
{
num2 += Ip[i] * pow(2, index);
}
else if (i >= 17 && i <= 24)
{
num3 += Ip[i] * pow(2, index);
}
else if (i >= 25 && i <= 32)
{
num4 += Ip[i] * pow(2, index);
}
index--;
// 下一段IP开始的权为7
if (index < 0)
{
index = 7;
}
}
printf("%d.%d.%d.%d", num1, num2, num3, num4);
return 0;
}
以上是关于[PTA]实验8-2-10 IP地址转换的主要内容,如果未能解决你的问题,请参考以下文章