3.5 进制转换学习

本文主要解决对于两个不同进制的数字如何转换

对于一个P进制的数,如果想要转换为Q进制,需要分两步

1.将P进制数字x转换为10进制数y。

对于一个十进制的数 y = d 1 d 2 . . . d n y=d_1d_2...d_n y=d1d2...dn ,它可以写成:
y = d 1 ∗ 1 0 n − 1 + d 2 ∗ 1 0 n − 2 + . . . + d n − 1 ∗ 10 + d n y=d_1*10^{n-1}+d_2*10^{n-2}+...+d_{n-1}*10+d_n y=d110n1+d210n2+...+dn110+dn
同样的,P进制数x为 a 1 a 2 . . . a n a_1a_2...a_n a1a2...an ,那么它写成下面这个形式之后使用十进制的加法和乘法,就可以转换为十进制数 y 1 y_1 y1:
y = a 1 ∗ P n − 1 + a 2 ∗ P n − 2 + . . . + a n − 1 ∗ P + a n y=a_1*P^{n-1}+a_2*P^{n-2}+...+a_{n-1}*P+a_n y=a1Pn1+a2Pn2+...+an1P+an
例如:
注意要倒着乘
在这里插入图片描述

在这里插入图片描述
将P进制数字x转换为10进制数y 代码实现

int y=0, product=1;
while(x != 0){
	y = y + (x % 10) * product;
	x = x / 10;
	product = product * p;
}

2.将十进制数y转换为Q进制数z。

采用”除基取余法“,所谓的“基”就是指将要转换成的进制Q,因此除基取余的意思就是每次将待转换数除以Q,然后将得到的余数作为低位储存,而商则继续除以Q并进行上面的操作,最后当商为0时,将所有位从高到低输出就可以得到z
例子:
将十进制数11,转换为二进制数
在这里插入图片描述
将十进制数y转换为Q进制数z 代码实现

int z[40], num= 0;//数组z存放进制数z的每一位,num为位数
do{
	z[num++] = y % Q;//除基取余
	y = y / Q;
}while(y != 0);//当商不为0时候进行循环

注意:输出时要从后往前输出结果:for(int i=num-1;i>=0;i--) cout<<z[i];
这样z数组从高位z[num-1]到低位z[0]即为Q进制z,进制转换完成,值得注意的是,代码中使用do…while语句而不是用while语句的原因是:如果十进制数y恰好等于0,那么使用while语句将使循环直接跳出,导致结果出错(正确结果应当是数组z中存放了z[0]=0)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值