PAT-进制转换

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

PAT-进制转换

方知有   2020-03-02 我要评论

3.5-进制转换

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

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

   对于一个十进制数y=d1d2···dn,可以将其写为:

   y = d1 * 10n-1 + d2 * 10n-2 + ··· + dn-1 * 10 + dn

   对于P进制数x,如果其形式为a1a2···an,则可以将其写为:

   x = a1 * Pn-1 + a2 * Pn-2 + ··· + an-1 * P + an

   在该形式下,可以有如下代码将P进制数x转为十进制数y:

1 int y=0,product=1;//product 在循环中会不断乘p,得到1、P、P^2、P^3····
2 while(x!=0){
3     y=y+(x%10)* product;//x%10是为了每次获取x的个位数
4     x=x/10;//去掉x的个位
5     product=product*P;
6 }

 

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

   采用“除基取余法”。“基”就是指将要转换成的进制Q的数值,所以“除基取余法”就是   每次将待转换的十进制数除以Q,然后将得到的余数作为低位存储,所得的商继续除   以Q并进行上面的操作,最后当商为0时,将所有的余数从高到低进行输出就可以得到   z。

   举例:将十进制数11转换为二进制数

 11除以2,得商为5,余数为1;
 5除以2,得商为2,余数为1;2除以2,得商为1,余数为0;
 1除以2,得商为0,余数为1,算法终止。
 将余数从后往前输出,得1011即为11的二进制数。

   转换代码:

int z[40],num=0;//数组z存放Q进制数y的每一位,num为位数
do{
     z[num++]=y%Q;//除基取余
     y=y/Q;
}while(y!=0);//当商不为0时进行循环
//数组从高z[num-1]到低z[0]输出即为Q进制z,进制转换完成。
//使用do···while语句而不是while语句:如果当十进制数y等于0,
//那么使用while语句的代码将使循环直接跳出,导致出错(正确的
//结果应当是数组z中存放了z[0]=0)

 

参考书籍-《算法笔记》-胡凡

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们