对于一个P进制的数,如果要转换为Q进制,需要分为两步:
(1)将P进制数x转换为十进制数y
对于一个十进制的数。它可以写成这个形式:
同样的,如果P进制数x为,那么它写成下面这个形式之后使用十进制的加法和乘法,就可以转换为十进制数y:
这个公式可以使用下面的代码实现:
int y=0,product=1;
while(x!=0){
y=y+(x%10)*product;
x/=10;
product=product*p;
}
(2)将十进制数y转换为Q进制数z
采用“除基取余法”,所谓的基,是指将要转换成的进制Q,因此除基取余的意思就是每次将代转换数除以Q,然后将得到的余数作为低位存储,而商则继续除以Q并进行上面的操作,最后当商为0时,将所有位从高位到低位输出就可以得到z。
int z[maxn],num=0;
do{
z[num++]=y%Q;
y/=Q;
}while(y!=0);
这样z数组从高位z[num-1]到低位z[0]即为Q进制z,进制转换完成。这里使用do……while语句而不是while语句的原因是,如果十进制y恰好等于0,那么使用while语句将使循环直接跳出,导致结果出错。