问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
题意:给定一个十六进制的数,转化成十进制的数输出。
思路:用求得的已知数*16+每位上的值,是求十进制一种简单方法。不用从尾部开始求起。
注意:这里的数超过int,所有最后的十进制数要用long long int存储,long也会错误。
代码:
#include <iostream>
#include<string>
using namespace std;
int main(int argc, char** argv) {
string s;
long long int num = 0;//注意不能用int或者long存储,否则会错误。用long long int保存数值
cin>>s;
for(int i=0;i<s.size();i++){//已求的前面的数num*16+每位对应的数字,全部加起来即是十进制的数,不用从尾部开始
if(s[i]>='0'&&s[i]<='9'){//要判断每位数是0-9还是A-F,转化位对应的数
num = num*16+(s[i]-'0');
}else if(s[i]>='A'&&s[i]<='F'){
num = num*16+(s[i]-'A'+10);
}
}
cout<<num<<endl;
return 0;
}