C语言 · 十六进制转十进制

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

 

posted @ 2017-02-28 14:13  人间烟火地三鲜  阅读(34355)  评论(0编辑  收藏  举报