一、将 p 进制数 x 转换为 十进制数 y
int y = 0, product = 1; //product循环中会不断乘 p , 得到 1、p 、p^2...
while( x != 0 ) {
y = y + (x % 10) * product; // x % 10 是为了每次获取x的个位数
x /= 10; // 去掉 x 的个位
product *= p;
}
二、将十进制数 y 转换为 Q进制数 z
用“除基取余法”,基----要转换成的进制Q
int z[40], num = 0; //数组 z 存放 Q进制数 y 的每一位, num为位数
do {
z[num++] = y % Q; //除基取余
y = y / Q;
} while( y != 0); // 当商不为 0 时进行循环
z数组从高位 x[num-1] 到低位 z[0] 则为Q进制z,进制转换完成。
代码中使用do……while 语句而不是while语句的原因是:
如果十进制数 y 恰好等于 0,那么使用 while 语句将直接跳出循环,导致结果出错 。
正确结果应当是数组 z 中存放了 z[ 0 ] = 0 。