您的位置:首页 > 其它

进位制换算

2015-11-08 15:04 225 查看
基础测试编程题:
编程实现将任意的十进制整数转换成任意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循环内部本身就是在做我上述描述的算法,其他部分就都很好理解了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: