藍橋杯試題,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