蓝桥杯试题,16进制转10进制,C语言算法
话不多说,先上程序。
#include <stdio.h>
#include <string.h>
int main()
{
char str[8];
int sum=0,n,i,k=1,m;
scanf("%s",str);
n=strlen(str);
for(i=n;i>0;i--){
if(str[i-1]>='0'&&str[i-1]<='9'){
m=str[i-1]-'0';
}else{
m=str[i-1]-'A'+10;
}
sum+=m*k;
k*=16;
m=0;
}
printf("%u",sum);
return 0;
}
有的朋友输出时可能会产生溢出,这是因为%d不能输出过大的数,具体不再详述,这里只需要改成%u就可以了。
最后谈一下16进制转10进制的算法:
可能你已经做过16进制转8进制的算法题,但16进制转10进制比转8进制简单的多。
16进制转10进制:
ABCDEF分别代表10,11,12,13,14,15
把FDC转换成10进制就是:FDC=15*(16^2)+13*(16^1)+12*(16^0)
同理也可以转换15进制的。
10进制转换16进制:
除16取余数得最低一位,然后把商继续出16得倒数第二位,直到商为零。
例如:
65036 除 16,余数 12(C),商4064
4064 除 16,余数 0(0),商254
254 除 16,余数 14(E),商15
15除16,余数 15(F),商0,结束
得16进制为 FE0C