基础练习 十六进制转十进制
时间限制:1.0s 内存限制:512.0MB
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
解题思路
要注意当输入FFFFFFFF的时候,如果用int会溢出,需要使用__int64
代码
#include<stdio.h>
#include<math.h>
#include<string.h>
char s[10];
int switcha(char c)
{
if(c>='0'&&c<='9')
return c-'0';
else if(c>='A'&&c<='F')
return 10+c-'A';
}
int main()
{
__int64 now,b;
int len;
int i,j;
while(scanf("%s",s)!=EOF)
{
len=strlen(s);
now=0;
for(i=0,j=len-1;i<len;i++,j--)
{
b=(int)pow(16,j);//如果不另设变量b则不能通过
now+=b*switcha(s[i]);
//也可以按数位依次操作,每次将前面的乘16,再加上当前数位的值。
//now+=now*16+switcha(s[i]);
}
printf("%I64d\n",now);
}
return 0;
}