进制转换

将P进制数 x 转换为十进制数 y

      对于一个十进制的数 y = d_{_1 }d_{_2} ... d_{n} ,它可以写成这种形式:

                          y = d_{_1 } * 10^{n-1}+d_{_2}*10^{n-2}+...+d_{n-1}*10+d_{n}

      同样的,如果P进制数x为 a_{_1 }a_{_2}...a_{n},那么它写成下面这个形式之后使用十进制的加法和乘法,就可以转换为十进制数y:

                         y = a_{_1 } * P^{n-1}+a_{_2}*P^{n-2}+...+a_{n-1}*P+a_{n}

     而这个公式可以很容易用循环进行实现:

// 将P进制数 x 转换为十进制数 y
int y=0,product=1;  //product在循环中会不断乘P,得到1,P,P^2,P^3...
while(x != 0){
    y = y + (x % 10) * product;   // x % 10 是为了每次获得 x 的个位数
    x = x / 10;  //去掉 x 的个位数
    product = product * P;
}

 

将十进制数 y 转换为Q进制的z 

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

   将余数从后往前输出,得1011即为11的二进制数。

       由此可以得到实现的代码(将十进制数 y 转换为Q进制的,结果存放在数组z):

  1.  11除以2,得商为5,余数为1;
  2.  5除以2,得商为2,余数为1;
  3.  2除以2,得商为1,余数为0;
  4.  1除以2,得商为0,余数为1,算法终止。
// 将十进制数 y 转换为Q进制的z
int z[40],num = 0; //数组z存放Q进制数y的每一位,num为位数
do{
    z[num++] = y % Q;  //除基取余
    y = y / Q;
}while(y != 0); //当商不为 0 时进行循环

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值