http://lx.lanqiao.cn/problem.page?gpid=T50
基础练习 十六进制转十进制
时间限制:1.0s 内存限制:512.0MB
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
string str[16] = {"0000", "0001", "0010", "0011",
"0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011",
"1100", "1101", "1110", "1111"};
int main(){
string s0, s1;
cin >> s0;
int len =s0.length();
for(int i = 0; i < len; i++){
if(s0[i] >= '0' && s0[i] <= '9'){
s1 += str[s0[i] - '0'];
}
else{
s1 += str[s0[i] - 'A' + 10];
}
}
long long sum = 0;
len = s1.length();
// for(int i = len - 1, j = 0; i >= 0; i--){
// sum += (s1[i] - '0') * (1 << j);
// j++;
// }
long long t = 1;
for(int i = len - 1; i >= 0; i--){ //注意FFFFFFFF=4294967295,int下会 = -1
sum += (s1[i] - '0') * t;
t *= 2;
}
cout << sum << endl;
return 0;
}
浙公网安备 33010602011771号