[蓝蓝计算机考研算法训练二期]-day27

74 阅读1分钟

41、写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。

数据范围: 1 <=n <= 2 31-1

输入描述:

输入一个十六进制的数值字符串

输出描述:

输出该数值的十进制字符串。不同组的测试用例用\n隔开。

示例1

输入:

0xAA

输出:

170

思路

读取字符的时候每一个数字乘以16进行进制转换,如果说是大于10则进行相应的转换,将字符变成相应的数字。

具体实现

#include <iostream>
using namespace std;

int main() {
	string s; //存放十六进制数 
	int ans; //保存转换后的十进制数 
	while (cin >> s) {
		int ls = s.size();
		ans = 0;
		for (int i = 0; i < ls; i++) { //从第一个字符开始遍历(最右边的) 
			ans = ans * 16;
			if (s[i] >= '0' && s[i] <= '9')
				ans = ans + (s[i] - '0');
			else //从10开始往后就为字母A~F 
				ans = ans + (s[i] - 'A') + 10;
		}
		cout << ans << endl;
	}
	return 0;
} 

image.png

小结

本次算法只是对数组的一种变形使用,我们在使用的时候要多多进行变化。