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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Morning_jcg 于 2015-11-8 14:45 编辑

/*********************************************************************************


以下为本人的基础测试题,所表答案为我的答案,分析也是自己的理解,如有不对,还望指正。


**********************************************************************************/
编程题4:
编程实现将任意的十进制整数转换成任意R进制数(R在2-16之间)
我的源码:
  1. /*
  2. 编程实现将任意的十进制整数转换成任意R进制数(R在2-16之间)
  3. */

  4. #include <stdio.h>
  5. #include <string.h>
  6. #define MAX  1000

  7. int main(){
  8.         int R, num, i = 1, count = 0, len;
  9.         char ch[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
  10.         char ans[MAX];
  11.         printf("请输入需要转化成的进制数:");
  12.         scanf("%d", &R);
  13.         printf("请输入需要转化的十进制数:");
  14.         scanf("%d", &num);
  15.         while (num){
  16.                 ans[count] = ch[num%R];
  17.                 num /= R;
  18.                 i *= R;
  19.                 count++;
  20.         }
  21.         ans[count] = '\0';
  22.         len = strlen(ans);
  23.         for (i = 0; i < len; i++){
  24.                 printf("%c", ans[len - i - 1]);
  25.         }
  26.         printf("\n");
  27.         return 0;
  28. }
复制代码



要做这道题,我们首先应该明白进位制转换到底是怎么一个过程。这里主要讲的是将10进制的数转化为其他进制的数。
首先进制的概念大家应该都要清楚,不清楚可以去百度查。各个进制间其实没有本质的区别。10进制我们用的最多,而且我们的数字系统本身是建立在10进制上的,所以我们最熟悉,也最熟练。
将其他进制的数转化为10进制十分简单(数字系统决定的)。比如我要将6进制的(12345)数转化为10进制,只需要根据定义,得5+4*6+3*6^2+2*6^3+1*6^4=1865.那反向的运算我们应该怎么去做的。还是得从这个式子中寻找线索。
我们发现,对于n进制的(abcde),都有10进制为e+d*n+c*n^2+b*n^3+a*n^4,从这个式子来看,其除以n的余数即位n进制中的个位数。商为d+c*n+b*n^2+a*n^3,再除以n,余数是十位数,以此类推。于是我就搞了上面这个算法。其中ch[]是字符表,题目要求最多为16进制,所以为16个,20进制的话就要加20个。while循环内部本身就是在做我上述描述的算法,其他部分就都很好理解了。


7 个回复

倒序浏览
你这写题目哪儿来的?
回复 使用道具 举报
打滚的橘子 发表于 2015-11-8 20:09
你这写题目哪儿来的?

基础测试题撒,,
回复 使用道具 举报
好顶赞!
回复 使用道具 举报
好顶赞!
回复 使用道具 举报
Morning_jcg 发表于 2015-11-8 21:29
基础测试题撒,,

报名流程中的?总共有多少道题?
回复 使用道具 举报
打滚的橘子 发表于 2015-11-10 00:06
报名流程中的?总共有多少道题?

记得是4道填选6道代码,,
回复 使用道具 举报
学习,学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马