华为OJ(整数与IP地址间的转换)

描述

原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成
一个长整数。
举例:一个ip地址为10.0.3.193
每段数字             相对应的二进制数
10                   00001010
0                    00000000
3                    00000011
193                  11000001
组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。

 

的每段可以看成是一个0-255的整数,需要对IP地址进行校验

 

 

 

知识点 字符串,位运算
运行时间限制 10M
内存限制 128
输入

输入 
1 输入IP地址
2 输入10进制型的IP地址

输出

输出
1 输出转换成10进制的IP地址
2 输出转换后的IP地址

样例输入 10.0.3.193 167969729
样例输出 167773121 10.3.3.193
主要是整数转换成字符串有点麻烦。

#include<iostream>
#include<string>
using namespace std;
string IntoStr(int n)
{
	char p[100],str[100];
	string s;
	if(n==0)
		return "0";
	else
	{
		int i=0;
		while(n)
		{
			p[i]=n%10+'0';
			n=n/10;
			i++;
		}
		int j=0;
		i--;
		while(i>=0)
		{
			str[j]=p[i];
			i--;
			j++;
		}
		str[j]='\0';
		s=str;
		return s;
	}
}
bool IntoIp(unsigned int n)
{
	string ip,str;
	int temp;
	temp=n%256;
	ip=IntoStr(temp);	
	str=ip+str;	
	n=n/256;
	for(int i=0;i<3;i++)
	{
		temp=n%256;
		ip=IntoStr(temp);
		ip+=".";
		str=ip+str;
		n=n/256;
	}
	if(n!=0)
		return false;	
	cout<<str<<endl;
	return true;
}	
bool IptoInt(string s)
{
	string str;
	int iptmp,ipsum=0;
	for(int i=0;i<3;i++)
	{
		int pos=s.find_first_of('.',0);
		str=s.substr(0,pos);
		s=s.substr(pos+1,s.size()-pos-1);
		iptmp=atoi(str.c_str());		
		if(iptmp<0||iptmp>255)
			return false;
		ipsum=ipsum*256+iptmp;
	}
	iptmp=atoi(s.c_str());	
	if(iptmp<0||iptmp>255)
		return false;
	else
		ipsum=ipsum*256+iptmp;
	cout<<ipsum<<endl;
	return true;
}
int main()
{
	string s;
	unsigned int n;
	cin>>s>>n;
	IptoInt(s);
	IntoIp(n);
	//system("pause");
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值