【蓝桥杯】 基础练习 十六进制转十进制

题目

问题描述
  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
《【蓝桥杯】 基础练习 十六进制转十进制》

时间限制:1.0s 内存限制:512.0MB

正确代码

注意:8位的正的十六进制数,最大值为2的32次方-1;而int的最大值是2的31次方-1!范围小了
而unsigned int 的范围刚刚好

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;

int main(){
	char t,ch[8];
	int i,s[8],len;
	unsigned int num = 0;  //想一想为什么这里不用int型呢?
	cin>>ch;
	len = strlen(ch);
	for(i = 0; i < len; i++){
		switch(ch[i]){
			case 'A':s[i] = 10;break;
			case 'B':s[i] = 11;break;
			case 'C':s[i] = 12;break;
			case 'D':s[i] = 13;break;
			case 'E':s[i] = 14;break;
			case 'F':s[i] = 15;break;
			default:s[i] = ch[i]-'0';
		}		
	}
	int j = 0;	
	while(j < i){
		num *= 16;
		num += s[j++];	
	}	
	cout<<num;			
	return 0;
} 

result:
《【蓝桥杯】 基础练习 十六进制转十进制》

问题代码(?)

(我很痛苦,我觉得这个代码应该很精简了,为什么就是超时呢?
后来经过一次又一次尝试,发现读取字符串使用getchar,就超时;
然后改成cin,就没毛病了,蛋疼,此疑问暂留于此)

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;

int main(){
	char t;
	int i = 0,s[8];
	unsigned int num = 0;
	while((t = getchar()) != '\n'){
		switch(t){
			case 'A':s[i] = 10;break;
			case 'B':s[i] = 11;break;
			case 'C':s[i] = 12;break;
			case 'D':s[i] = 13;break;
			case 'E':s[i] = 14;break;
			case 'F':s[i] = 15;break;
			default:s[i] = t-'0';
		}
		i++;		
	}
	int j = 0;	
	while(j < i){
		num *= 16;
		num += s[j++];	
	}	
	cout<<num;			
	return 0;
} 

《【蓝桥杯】 基础练习 十六进制转十进制》

    原文作者:进制转换
    原文地址: https://blog.csdn.net/Zhangguohao666/article/details/87391240
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞