A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© disgusting 中级黑马   /  2014-6-13 16:21  /  1391 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 disgusting 于 2014-6-14 19:47 编辑

编程实现将任意的十进制整数转换成任意R进制数(R在2-16之间)。(

8 个回复

倒序浏览
本帖最后由 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. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报

好的谢谢我会好好看的。
回复 使用道具 举报

代码没问题,但是为什么反序可以求出进制啊,机理是啥能帮我解释下么 QAQ
回复 使用道具 举报
哈哈有点自虐的想把题目改成任意10进制实数哈哈
回复 使用道具 举报
回复 使用道具 举报
有点研究懂了
回复 使用道具 举报
懂了。。。ASCII 表太神奇了
回复 使用道具 举报
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   你取数组的时候就要先取第三个 再取带二个 最后第一个
                     

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马