#include
int main ()
{
int n,m;
while (scanf ("%d%d",&n,&m)!=EOF)
{
if (m<2||m>16) continue;
int a[100]={},i=0,j=1,k=0,f=1;
char b[100]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',};
if (n<0)
{f=0;n=-n;
}
for (i=0;n;i++)
{
a[i]=n%m;
n=n/m;
}
k=i;
if (f==0)printf ("-");
for (k=k-1;k>=0;k--)
{
if (a[k]>=10) printf ("%c",b[a[k]]);
else printf ("%d",a[k]);
}
printf ("\n");
}
return 0;
}
这道题的难点应该在于大于10的数要转换成字母,和负号的输出。
作者在做题的时候始终通过不了,最后发现输出的IF判断里少了一个等号,我觉得这是一个很好的教训,程序的代码就是非常严格,即使少了一个小小的符号,整个程序就会出现错误
这道题要注意的点
进制转换要模除取余,把余数放入数组,最后再将数组倒序输出。
如果有负号,要先把负号提出来,不如输出的时候数组里的每个数都带着负号
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)