1、十進制轉2~16進制
【問題描述】從鍵盤輸入十進制整數num及轉換的進制數base,將整數num轉換為base進制(base取值范圍為 2~16)。
方法為:十進制數除base取余法,即十進制數除以base,余數為權位上的數,得到的商值繼續除以base,依此步驟繼續向下運算直到商為0為止。
源程序:
#include?
void trans(int data, int base)?
{?
??? int x[64],k,i=0;
??? while(data)?
??? {??
??????? x[i]=data%base;??
??????? data/=base;
??????? i++;
??? }
??? for(k=i-1;k>=0;k--)
????? if(x[k]<10)?
?????? ???? printf("%d", x[k]);????
????? else if(x[k]<=16)?
?????? ???? printf("%c", 'A'+x[k]-10);?
}?
int main(void)?
{?
??? int num,base;?
??? scanf("%d%d", &num, &base);?
??? if(base<=0||base>16)
?????? {?
????? ? ? printf("data error\n");?
????? ? ? return;?
??? ? ?}?
??? printf("number=%d? base=%d\n",num,base);?
??? trans(num,base);?
??? printf("\n");?
??? return 0;
}?
2、十六進制轉十進制
【問題描述】輸入一個字符串,取出該字符串中的十六進制字符(不分大小寫)組成一個新的表示十六進制數的字符串,輸出該字符串并將其轉換成十進制數后輸出。
方法為:十六進制數由數字0~9、字母A~F(或a~f)組成。把十六進制數按權展開、相加即得十進制數。
源程序:
#include
#include
int main(void)
{
? char s[20],hex[20];
? int i,j,num;
? gets(s);
? /*?取出字符串中的十六進制字符? */
? for(i=0,j=0;s[i]!='\0';i++)
?? {
???? if(s[i]>='0'&&s[i]<='9'||s[i]>='A'&&s[i]<='F'||s[i]>='a'&&s[i]<='f')
?????? {
?????? ? ?hex[j]=s[i];
?????? ? ?j++;
?????? }
?? }
?? hex[j]='\0';
?? printf("Hexadecimal String: ");
?? puts(hex);
?? /*?十六進制轉十進制?*/?
?? num=0;??
?? for(i=0;hex[i]!='\0';i++)
??? {
?? ? ???if(hex[i]>='0'&&hex[i]<='9')
?? ? ? ?????num=num*16+hex[i]-'0';
?? ? ????else if(hex[i]>='A'&&hex[i]<='F')
? ? ? ? ? ? ? ? ? ? ?num=num*16+hex[i]-'A'+10;
? ? ? ? ? ? ? ? ?else if(hex[i]>='a'&&hex[i]<='f')
? ? ? ? ? ? ? ? ? ? ?num=num*16+hex[i]-'a'+10;??
??? }
?? printf("Decimal number=%d\n",num);??????????
?? return 0;
}