输入一个十进制数N,将它转换成R进制数输出。
##
进制转换常用的一个方法就是除基取余法,而十六进制所不同的特点是它可以用字母表示,比较复杂了,所以用一个数组来存放十六进制中可能出现的数字和字母,然后除基取余,用另一个数组来存放对应的十六进制数,最后结果是倒序输出的。注意这两个数组都是字符型的。
需要转换的 十进制数也有可能是一个负数,这时不能直接用负数进行计算,而是先转换成一个正数,转换成十六进制后在前面加上字符“-”。对输入数字要进行正负判断,分别处理。
#include<stdio.h>
int main()
{
int i,n,r,x;
char a[1000],b[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
while (scanf ("%d%d",&n,&r)!=EOF)
{
if (n>0)
x=1;
else
x=-1;
n=n*x;
for (i=0;i>=0;i++)
{
a[i]=b[n%r];
if (n/r==0)
break;
n=n/r;
}
if (x<0)
a[++i]='-';
for (;i>=0;i--)
printf ("%c",a[i]);
printf ("\n");
}
return 0;
}