1、十進位轉2~16進位
【問題描述】從鍵盤輸入十進位整數num及轉換的進位數base,將整數num轉換為base進位(base取值範圍為 2~16)。
方法為:十進位數除base取餘法,即十進位數除以base,餘數為權位上的數,得到的商值繼續除以base,依此步驟繼續向下運算直到商為0為止。
源程序:
#include<stdio.h>
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<stdio.h>
#include<string.h>
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;
}