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; }