蓝桥杯试题,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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM