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


    帮忙点个赞,谢了!

  • 相关阅读:
    15 | 二分查找(上):如何用最省内存的方式实现快速查找功能?
    11 | 线程:如何让复杂的项目并行执行?
    数据结构与算法-10-递归调用
    (图文并茂,权威最详细)Wireshark抓包分析 TCP三次握手/四次挥手详解
    总结-自己傻的坑学习java spingboot不仔细
    网络抓包
    数据库简介
    JavaSE基础之Map与Collection
    JavaSE基础之抽象类与接口
    JavaSE基础之重载和重写
  • 原文地址:https://www.cnblogs.com/coding365/p/12872418.html
Copyright © 2011-2022 走看看