一、题目信息
内存限制:512.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
二、问题分析
将十六进制数按权展开累加即可
三、具体执行
用string类型存放十六进制数,用for循环和switch_case_default语句进行赋值运算
四、完整代码如下
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main()
{
long long p = 0;
string s;
cin >> s;
for (unsigned i = 0; i < s.length(); i++)
{
switch(s[i])
{
case '0': p += 0 * pow(16,s.length()-i-1); break;
case '1': p += 1 * pow(16,s.length()-i-1); break;
case '2': p += 2 * pow(16,s.length()-i-1); break;
case '3': p += 3 * pow(16,s.length()-i-1); break;
case '4': p += 4 * pow(16,s.length()-i-1); break;
case '5': p += 5 * pow(16,s.length()-i-1); break;
case '6': p += 6 * pow(16,s.length()-i-1); break;
case '7': p += 7 * pow(16,s.length()-i-1); break;
case '8': p += 8 * pow(16,s.length()-i-1); break;
case '9': p += 9 * pow(16,s.length()-i-1); break;
case 'A': p += 10 * pow(16,s.length()-i-1); break;
case 'B': p += 11 * pow(16,s.length()-i-1); break;
case 'C': p += 12 * pow(16,s.length()-i-1); break;
case 'D': p += 13 * pow(16,s.length()-i-1); break;
case 'E': p += 14 * pow(16,s.length()-i-1); break;
case 'F': p += 15 * pow(16,s.length()-i-1); break;
default: break;
}
}
cout << p;
return 0;
}