题目描述
IP地址是一个长度固定为 3232 位 的 01 序列,给定一个IP地址,请将它转成点分十进制后输出。
点分十进制的转化方法如下:首先将IP地址分割成长度相等的四个二进制数字(每个二进制数字的长度为 88),然后将这些数字用十进制表示,中间用
.
分割。例如某个IP地址为:
11000000101010000000000101100100
,那么
11000000
对应十进制数字为192
10101000
对应十进制数字为168
00000001
对应十进制数字为1
01100100
对应十进制数字为100
这个IP地址的点分十进制表示为
192.168.1.100
。输入格式
3232 个 01 字符:表示一个给定的IP地址
输出格式
一行字符:表示给定IP地址的点分十进制表示
>>>>>>分割线>>>>>>>>>>>>>分割线>>>>>>>>>>>>>分割线>>>>>>>>>>>>>分割线>>>>>>>
思路
1.每8位转为一个十进制数,则可以使用8个长度的数组,每次只处理8个输入的字符
2.从最高位到,如果是1则加上对应的幂运算结果【看代码逻辑】
3.注意点的输出,i=1,2,3时输出点【i<4】
程序
#include<bits/stdc++.h>
using namespace std;
char a[10];
int e=0;
int main(){
for(int i=1;i<=4;i++){
cin>>a[1]>>a[2]>>a[3]>>a[4]>>a[5]>>a[6]>>a[7]>>a[8];
if(a[1]=='1'){
e+=128;
}
if(a[2]=='1'){
e+=64;
}
if(a[3]=='1'){
e+=32;
}
if(a[4]=='1'){
e+=16;
}
if(a[5]=='1'){
e+=8;
}
if(a[6]=='1'){
e+=4;
}
if(a[7]=='1'){
e+=2;
}
if(a[8]=='1'){
e+=1;
}
if(i<4) cout<<e<<".";
else cout<<e;
e=0;
}
}