16进制转10进制【北京大学考研机试题】

16进制转10进制

写出一个程序,输入一个十六进制的数值字符串,输出该数值的十进制字符串。

输入格式

输入包含多组测试数据。

每组数据占一行,包含一个十六进制的数值字符串。

输出格式

每组数据输出一行结果,表示给定数值的十进制字符串。

数据范围

每个输入最多包含 100组数据。
所有答案均在 int 范围内。

输入样例:

0xA
输出样例:

10

思路

秦九韶求和

代码

点击查看代码
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
const char nl = '\n';
int main(){
    string s;
	//转换为数字
    while(cin >> s){    // 多次输入
        int j;  
        int ret = 0;    //答案在int范围内
        if(s[0] == '-')j = 3;   //注意可能是负数
        else j = 2;
        for(int i = j; i <= s.size() - 1; i ++ ){   //秦九韶算法求10进制
            ret *= 16;		//注意要先乘
            if(s[i] >= '0' && s[i] <= '9')ret += (s[i] - '0');
            else if(s[i] >= 'A' && s[i] <= 'Z')ret += (s[i] - 'A' + 10);    //注意判断大小写
            else ret += (s[i] - 'a' + 10);  //注意要加上10
        }
        if(s[0] == '-')cout << -ret << nl;
        else cout << ret << nl;
    }
}
posted @ 2023-02-27 09:35  Keith-  阅读(21)  评论(0编辑  收藏  举报