进位制换算

基础测试编程题:

编程实现将任意的十进制整数转换成任意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循环内部本身就是在做我上述描述的算法,其他部分就都很好理解了。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值