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


    帮忙点个赞,谢了!

  • 相关阅读:
    JS站点
    1011 World Cup Betting (20分)
    1007 Maximum Subsequence Sum (25分)(动态规划DP)
    1006 Sign In and Sign Out (25分)
    1005 Spell It Right (20分)
    1004 Counting Leaves (30分)(DFS)
    1003 Emergency (25分)(Dijkstra算法)
    1002 A+B for Polynomials (25分)
    1001 A+B Format (20分)
    canvas
  • 原文地址:https://www.cnblogs.com/coding365/p/12872418.html
Copyright © 2011-2022 走看看