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;
}