本帖最后由 Morning_jcg 于 2015-11-8 14:45 编辑
/*********************************************************************************
以下为本人的基础测试题,所表答案为我的答案,分析也是自己的理解,如有不对,还望指正。
**********************************************************************************/
编程题4:
编程实现将任意的十进制整数转换成任意R进制数(R在2-16之间)
我的源码:
- /*
- 编程实现将任意的十进制整数转换成任意R进制数(R在2-16之间)
- */
- #include <stdio.h>
- #include <string.h>
- #define MAX 1000
- int main(){
- int R, num, i = 1, count = 0, len;
- char ch[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
- char ans[MAX];
- printf("请输入需要转化成的进制数:");
- scanf("%d", &R);
- printf("请输入需要转化的十进制数:");
- scanf("%d", &num);
- while (num){
- ans[count] = ch[num%R];
- num /= R;
- i *= R;
- count++;
- }
- ans[count] = '\0';
- len = strlen(ans);
- for (i = 0; i < len; i++){
- printf("%c", ans[len - i - 1]);
- }
- printf("\n");
- return 0;
- }
复制代码
要做这道题,我们首先应该明白进位制转换到底是怎么一个过程。这里主要讲的是将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循环内部本身就是在做我上述描述的算法,其他部分就都很好理解了。
|
|