提交序号 | 6597474 |
---|---|
作者 | weightless |
提交时间 | 01-15 16:40:45 |
评测结果 | 正确 |
得分 | 100 |
CPU使用 | 0ms |
内存使用 | 2.601MB |
试题名称 | 基础练习 十六进制转十进制 |
大致的思路:根据16进制的每个数的ASCII值分别讨论,然后用一个变量来求和,同时要注意根据位置的不同,还有乘上相应的进制倍数。
废话不多说,上代码
#include <stdio.h>
int main(){
int i,j=1; //j是记录进位级数
long num=0;//结果十进制
char n[100000],*p;
gets(n); //获取16进制数
p=n;
while(*(p+1)){
p++;
}
//16进制转10进制
while(*p){
if((*p)<58&&(*p)>=48)//0的ASCII值是48
{
num+=((*p)-48)*j;
}
if((*p)>64&&(*p)<71)//A的ASCII值是65
{
num+=((*p)-55)*j;
}
p--;
j*=16;
}
printf("%lld",num);
return 0;
}
需要注意的是转换过来的十进制必须用长整型,因为在题目范围最大的16进制转换10进制数是超过int类型的范围,因此有些小伙伴在测试的时候只有75分,因为最后的一个测试数是超过int范围的。