• 题目(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进制,用短除(不懂可以百度一下)。
    最后用字符串。


    帮忙点个赞,谢了!

  • 相关阅读:
    面试再问HashMap,求你把这篇文章发给他!
    Maven Nexus私库搭建及使用,你还不会吗?
    两年摸爬滚打 Spring Boot,总结了这 16 条最佳实践
    @Controller,@Service,@Repository,@Component你搞懂了吗?
    mysql 输出当前月所有日期与对应的星期
    mysql创建每月执行一次的event
    一个关于explain出来为all的说明及优化
    怎么快速了解自己的MySQL服务器
    Mysql查找所有项目开始时间比之前项目结束时间小的项目ID
    Device eth0 does not seem to be present,delaying initialization解决方法
  • 原文地址:https://www.cnblogs.com/coding365/p/12872418.html
Copyright © 2020-2023  润新知