资源限制
内存限制:512.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
#include<iostream>
#include<math.h>
#include<string>
using namespace std;
long long sixteen_to_ten(string a){
int cnt=0;
long long sum=0;
for(int i=a.length()-1;i>=0;i--){
if(a[i]-'0'<10){
sum+=(a[i]-'0')*pow(16,cnt++);
}else{
//输入的没有小写字母,只有大写字母
sum+=(a[i]-'A'+10)*pow(16,cnt++);
}
}
return sum;
}
int main(){
char a[1000];
scanf("%s",a);
printf("%lld\n",sixteen_to_ten(a));
return 0;
}
因为题目规定输入不超过8位的正的十六进制数字符串,所以输入的最大值为FFFFFFFF=16^8-1=2^32-1>2^31-1(int类型最大值)。因此不能用int类型,应该用long long类型。