杭电OJ2031 C语言 已通过

杭电OJ2031 C语言 已通过,第1张

#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判断里少了一个等号,我觉得这是一个很好的教训,程序的代码就是非常严格,即使少了一个小小的符号,整个程序就会出现错误

这道题要注意的点

进制转换要模除取余,把余数放入数组,最后再将数组倒序输出。

如果有负号,要先把负号提出来,不如输出的时候数组里的每个数都带着负号

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/3002126.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存