黑马程序员技术交流社区

标题: 请教一道题,给我点思路也可以 [打印本页]

作者: disgusting    时间: 2014-6-13 16:21
标题: 请教一道题,给我点思路也可以
本帖最后由 disgusting 于 2014-6-14 19:47 编辑

编程实现将任意的十进制整数转换成任意R进制数(R在2-16之间)。(
作者: 69042011    时间: 2014-6-14 12:45
本帖最后由 69042011 于 2014-6-14 13:45 编辑
  1. /*
  2. 实现输入任何十进制,转化为2-16进制

  3. 思路:根据进制转化的思想来考虑
  4. 1.根据转化思想然后转化为条件 循环语句来实现
  5. (输入十进制数对其输入的R进制数求余得到的存入数组,然后对十进制数取整,循环。得到数组中的数就是R进制的反序的数,然后通过
  6. 循环得到最后答案)
  7. 2.构造整体框架
  8. (需要的循环 条件等等结构 用switch来解决10-15转化为abcde的问题)
  9. 3.补充代码
  10. (2-10进制是一类 11-16进制是一类)
  11. 4检查分析中间漏洞
  12. (比如条件上的严谨问题,范围,输出的范围等等)

  13. 注:我也才学,希望不足之处多多指出,可能很多地方没有很好的优化,共同进步吧!
  14. */
  15. #include <stdio.h>

  16. int system(int,int);

  17. int main()
  18. {
  19.         int a1,s1;

  20.         printf("请输入十进制数:\n");

  21.         scanf("%d",&a1);

  22.         printf("请输入要转化的进制数:\n");

  23.         scanf("%d",&s1);

  24.         system(a1,s1);

  25.         return 0;
  26. }

  27. int system(int a,int s)
  28. {

  29.         int ages[20] = {0};

  30.         int k = 0;

  31.         int a2 = a;

  32.         if (s > 16)
  33.         {
  34.                 printf("超出16进制!");
  35.         }

  36.         else if (s > 10)
  37.         {

  38.                 while (a2)
  39.                 {
  40.                         ages[k] = a2 % s;

  41.                         a2 = a2 / s;

  42.                         switch (ages[k])
  43.                         {
  44.                                 case 10:
  45.                                 ages[k] += 87;
  46.                                 break;

  47.                                 case 11:
  48.                                 ages[k] += 87;
  49.                                 break;

  50.                                 case 12:
  51.                                 ages[k] += 87;
  52.                                 break;

  53.                                 case 13:
  54.                                 ages[k] += 87;
  55.                                 break;

  56.                                 case 14:
  57.                                 ages[k] += 87;
  58.                                 break;

  59.                                 case 15:
  60.                                 ages[k] += 87;
  61.                                 break;

  62.                                 default:
  63.                                 ages[k] += 48;
  64.                                 break;
  65.                         }

  66.                         k++;
  67.                 }

  68.                 printf("十进制数:%d 转化为%d进制数是:",a,s);

  69.                 for (k = k-1;k >= 0 ;k--)
  70.                 {
  71.                         printf("%c",ages[k]);
  72.                 }
  73.        
  74.         }

  75.         else
  76.         {
  77.                 //因为a = a/s所以存在a=0,即退出循环
  78.                 while (a2)
  79.                 {
  80.                         ages[k] = a2 % s;

  81.                         k++;

  82.                         a2 = a2 / s;
  83.                 }

  84.                 printf("十进制数:%d 转化为%d进制数是:",a,s);

  85.                 for (k = k-1;k >= 0 ;k--)
  86.                 {
  87.                         printf("%d",ages[k]);
  88.                 }
  89.         }
  90.         printf("\n");
  91.        
  92. }
复制代码



作者: disgusting    时间: 2014-6-14 19:46
69042011 发表于 2014-6-14 12:45

好的谢谢我会好好看的。
作者: disgusting    时间: 2014-6-15 23:11
69042011 发表于 2014-6-14 12:45

代码没问题,但是为什么反序可以求出进制啊,机理是啥能帮我解释下么 QAQ
作者: disgusting    时间: 2014-6-15 23:40
哈哈有点自虐的想把题目改成任意10进制实数哈哈
作者: 王海江1    时间: 2014-6-15 23:47
69042011 发表于 2014-6-14 12:45

大神,,,,
作者: disgusting    时间: 2014-6-15 23:55
有点研究懂了
作者: disgusting    时间: 2014-6-16 00:31
懂了。。。ASCII 表太神奇了
作者: 69042011    时间: 2014-6-16 22:58
disgusting 发表于 2014-6-15 23:11
代码没问题,但是为什么反序可以求出进制啊,机理是啥能帮我解释下么 QAQ ...

  //(ages[k] = a2 % s;            k++;
            a2 = a2 / s; )  a2是你输入的十进制 比如说你要转化为2进制  s为2 对2求余不是0就是1  ,你用一般转化方法写出来,得到的10也是从最下面的数往上看 记得不
6%2=0 6/2 3
3%2 =13/2 1
1%2 =1 1/2 0(为假退出循环)

你得到的不是011  是110  ,同理先存入0再存入1再存入1   你取数组的时候就要先取第三个 再取带二个 最后第一个
                     






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2