将P进制数 x 转换为十进制数 y
对于一个十进制的数 y = ,它可以写成这种形式:
y =
同样的,如果P进制数x为 ,那么它写成下面这个形式之后使用十进制的加法和乘法,就可以转换为十进制数y:
y =
而这个公式可以很容易用循环进行实现:
// 将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):
- 11除以2,得商为5,余数为1;
- 5除以2,得商为2,余数为1;
- 2除以2,得商为1,余数为0;
- 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 时进行循环