話不多說,先上程序。
#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