基础练习 十六进制转十进制

问题描述

从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

样例输入

FFFF

样例输出

65535

idea

  • int型数据范围是10^9或32位整数,而本题中输入的八位数的十六进制超出了int范围会产生溢出(最后一个测试点就是),所以要用long long 型
  • 同理,最大的权重也会超出int范围

solution1

#include 
#include 
int main(){
	char s[10];
	int  t = 0;
	long long n = 0, power = 1;
	scanf("%s", s);
	for(int i = strlen(s) - 1; i >= 0; i--){
		if(s[i] <= '9') t = s[i] - '0';
		else t = s[i] - 'A' + 10;
		n += power*t;
		power *= 16;
	}
	printf("%lld", n);
	return 0;
}

solution2

#include 
#include 
int main(){
	char s[10];
	long long n = 0;
	scanf("%s", s);
	for(int i = 0; i < strlen(s); i++){
		if(s[i] <= '9') n = n * 16 + s[i] - '0';
		else n = n * 16 + s[i] - 'A' + 10;
	}
	printf("%lld", n);
	return 0;
}

你可能感兴趣的:(蓝桥杯,c++,算法,开发语言)