C语言 · 十六进制转十进制
基础练习 十六进制转十进制
时间限制:1.0s 内存限制:512.0MB
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
思路:
需要留意的是sum的类型,数大点就不通过。——用long long型就够了,用lld输出。
代码一:
1 #include<stdio.h> 2 #include<string.h> 3 int main(){ 4 char s[50]; 5 scanf("%s",&s); 6 int t,len; 7 len = strlen(s); 8 long long sum=0; 9 for(int i=0;i<len;i++){ 10 if(s[i]<='9') 11 t=s[i]-'0'; 12 else 13 t=s[i]-'A'+10; 14 sum=sum*16+t; 15 } 16 printf("%lld",sum); 17 return 0; 18 }
代码二:
1 #include<stdio.h> 2 #include<math.h> 3 #include<string.h> 4 int main(){ 5 char s[20]; 6 int i = 0, t = 0, temp = 0; 7 scanf("%s",s); 8 t = strlen(s);//得到字符串长度 9 long long answer=0; 10 for(int i=0;i<t;i++){ 11 if(s[i]>='A' && s[i]<='Z') 12 s[i]=int(s[i]-'A')+10+'0'; 13 answer+=((s[i]-'0')*(pow(16,t-1-i))); 14 } 15 printf("%lld",answer); 16 return 0; 17 }
代码三:
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 int main(){ 5 char strHex[10]; 6 int i = 0, len = 0, temp = 0; 7 long long answer = 0; 8 gets(strHex); 9 len = strlen(strHex); 10 for (i = 0; strHex[i] != '\0'; ++i){ 11 switch(strHex[i]){ 12 case 'A': temp = 10; break; 13 case 'B': temp = 11; break; 14 case 'C': temp = 12; break; 15 case 'D': temp = 13; break; 16 case 'E': temp = 14; break; 17 case 'F': temp = 15; break; 18 default: temp = strHex[i]-'0'; break; 19 } 20 answer += (temp*pow(16,len-1-i)); 21 } 22 printf("%lld",answer); 23 return 0; 24 }