48-

http://lx.lanqiao.cn/problem.page?gpid=T50
    
        基础练习 十六进制转十进制  
时间限制:1.0s   内存限制:512.0MB
      
问题描述
  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的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;
}

  

原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/8449152.html