题目内容:
编写程序,将十进制点分的IP转换为32位二进制IP地址。程序要能验证输入的十进制点分IP地址的合法性。用户输入的IP不和法时,输出"data error"。
请使用模块化程序设计的思想,将功能模块编写成函数。通过指针传递参数,操作数据,返回结果。在主函数中输入IP地址,调用函数进行合法性验证和转换,在主函数中输出32位二进制IP。
输入格式:
十进制点分IP地址(英文句点)
输出格式:
32位二进制数(二进制字符串)
输入样例:
202.151.96.33
输出样例:
11001010100101110110000000100001
提示:十进制转换为二进制。对整数部分,除2取余,直到商为0。例如
13/2=6…1(低位)
6/2=3…0
3/2=1…1
1/2=0…1
转换后的二进制数位1101
#include <iostream>
#include <stdio.h>
using namespace std;
void transform(int a)
{
int x[8]={0};
int *p=x,n=0;//n用来计算二进制数实际长度
while(a!=0)
{
*p=a%2;
p++;n++;
a/=2;
}
if(p<x+7)
{//如果二进制数占不满8位
for(int i=n;i<8;i++)//前面补零
cout<<0;
for(int i=n-1;i>=0;i--)//逆序输出
cout<<x[i];
}
else
for(int i=7;i>=0;i--)
cout<<x[i];
}
int main()
{
int a,b,c,d;
scanf("%d.%d.%d.%d",&a,&b,&c,&d);//输入数据的格式是四个带符号的十进制数,用英文点隔开
if((a>255||a<0)||(b>255||b<0)||(c>255||c<0)||(d>255||d<0))
{
cout<<"data error";
return 0;
}
else
{ transform(a);
transform(b);
transform(c);
transform(d);
}
return 0;
}