题目(11)答案

先把代码给出来,在解释。

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>

using namespace std;

string int2str(int aNum)
{
	stringstream res;
	res << aNum;
	string s;
	res >> s;
	return s;
}

int char2int(char s)
{
	stringstream res;
	res << s;
	int n;
	res >> n;
	return n;
}

int cifang16(int aNum, int time)//1 0
{
	int sum = 1;
	for(int i = 0; i < time; i++)
	{
		sum = sum * 16;
	}
	return sum * aNum;
}

int hex2dec(char hex, int time)
{
	int num;
	if(hex == 'A' || hex == 'a')
		num = 10;
	else if(hex == 'B' || hex == 'b')
		num = 11;
	else if(hex == 'C' || hex == 'c')
		num = 12;
	else if(hex == 'D' || hex == 'd')
		num = 13;
	else if(hex == 'E' || hex == 'e')
		num = 14;
	else if(hex == 'F' || hex == 'f')
		num = 15;
	else
		num = char2int(hex);
	num = cifang16(num, time);
	return num;
}
int binLen;
string ShortDivide(int dec)
{
	 int everytime, yu;
	 string num = "";
	 while(dec != 0)
	 {
	 	num += int2str(dec % 2);
	 	dec = dec / 2;
	 }
	 binLen = num.size();
	 return num;
}

string Dec2Bin(int dec)
{
	string lbin = ShortDivide(dec);
	return lbin;
}

int main()
{
	string hexNum;//十六进制数 △ 
	cin >> hexNum;//10
	int hlen = hexNum.size();
	int dec = 0;//十进制数 △ 
	for(int i = 0; i < hlen; i++)
	{
		dec += hex2dec(hexNum[hlen - i - 1], i);
	}
	cout << "十进制 " << dec << endl;
	//ShortDivide()函数 
	string bin = Dec2Bin(dec);//二进制数△ 
	int k = binLen % 4;
	cout << setw(4 - k + 1) << setfill('0');
	for(int i = binLen - 1; i >= 0; i--)
	{
		cout << bin[i];
	}
	cout << endl;
	return 0;
}

这个代码很长,但是很松散,也相对写的简单,因为有bitset函数库可以专门做进制转换,c++是支持的。
有两个新的函数库
#include “sstream”

#include “iomanip”
这两个函数库上百度搜索一下就出来了。
sstream能实现数据类型转换,见int2str()和char2int()函数,其中用stringstream定义了一个res变量,把int和char类型的变量计入,在转换成int和string类型返回,这个比-‘0’,+‘0’等工具好多了。
iomanip是一个输出控制的函数库,可以实现输出前补前缀,等功能,我用的是补前导0.

cout << setw(4 - k + 1) << setfill('0');

这一行在输出中用setw()确定输出多少个前导,用setfill()说明补的是什么。
setw()里面是我加的一个运算。
你们可以自己上电脑编译运行一下。

进制转换的方法就是先把16进制转换成10进制,用乘次方的办法,再把10进制转换成2进制,用短除(不懂可以百度一下)。
最后用字符串。


帮忙点个赞,谢了!

posted @ 2020-01-21 21:08  Aeterna_Gungnir  阅读(96)  评论(0编辑  收藏  举报