华为机试:整数与IP地址间的转换

一、题目:

描述

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

组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。

本题含有多组输入用例,每组用例需要你将一个ip地址转换为整数、将一个整数转换为ip地址。

输入描述:

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

输出描述:

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

二、输入输出示例:

三、代码:

#include<iostream>
using namespace std;
#include<string>
#include<vector>
#include<cmath>
#include<algorithm>
#include<sstream>
int main()
{
	string s;
	unsigned int num;
	vector<string> v1;
	vector<int>v2,v3;
	while (cin>>s>>num)
	{
		unsigned int res1 = 0;
		string res2 = "";
		v1.push_back("");
		int flag1 = 0;
		for (int i = 0; i < s.size(); i++)
		{
			if (s[i] != .)
			{
				v1[flag1] += s[i];
			}
			else
			{
				v1.push_back("");
				flag1++;
			}
		}
		for (int i = 0; i < v1.size(); i++)
		{
			int temp = 0;
			int flag2 = v1[i].size() - 1;
			for (int j = 0; j < v1[i].size(); j++)
			{
				temp += (v1[i][j] - 0) * pow(10, flag2--);
			}
			v2.push_back(temp);
		}
		for (int i = 0; i < v2.size(); i++)
		{
			int flag2 = (v2.size() - (i + 1)) * 8;
			if (v2[i] != 0)
			{
				while (v2[i] != 1)
				{
					res1 += (v2[i] % 2) * pow(2, flag2);
					flag2++;
					v2[i] /= 2;
				}
				if (v2[i] == 1)
				{
					res1 += pow(2, flag2);
				}
			}
		}
		cout << res1 << endl;
		if (num != 0)
		{
			while (num != 1)
			{
				v3.push_back(num % 2);
				num /= 2;
			}
			if (num == 1)
			{
				v3.push_back(1);
			}
		}
		else
		{
			cout << 0 << endl;
		}
		if (v3.size() % 8 != 0)
		{
			v3.resize((v3.size() / 8 + 1) * 8);
		}
		reverse(v3.begin(), v3.end());
		int flag3 = 0;
		for (int i = 0; flag3 < v3.size(); i++)
		{
			int res = 0;
			for (int j = 7; j >= 0; j--)
			{
				res += v3[flag3++] * pow(2, j);
			}
			stringstream temp1;
			string temp2;
			temp1 << res;
			temp1 >> temp2;
			res2 += temp2;
			if (flag3 < v3.size())
			{
				res2 += .;
			}
		}
		cout << res2 << endl;
		v1.clear();
		v2.clear();
		v3.clear();
	}
	system("pause");
	return 0;
}
经验分享 程序员 微信小程序 职场和发展