蓝桥杯试题,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
posted @ 2017-10-31 21:29  def一只菜鸡  阅读(6983)  评论(0编辑  收藏  举报