任意进制之间的转换:
将一个P进制数x转换为Q进制y,分两步:
(1)将P进制数x转换为十进制数k:按权展开
假设P进制的数x = a1 * a2 * a3 … an
十进制数k = a1 * P^(n - 1) + a2 * P^(n - 2) + … + d(n - 1) * P + dn;
伪代码:
int k = 0; //要求的十进制数
int pro = 1; //循环中会不断乘p,得到1,P,P^2,P^3.....P^(n-1)
while (x) {
k += (x % 10) * pro; //x%10【取出x的最后一位*权值】
x /= 10;
pro *= P;
}
(2)将十进制数k转换为Q进制y:除基取余数法
将需要转换的数除以Q,然后将余数作为低位存储,商继续除以Q,直到商为0。
eg:将十进制数11转换为二进制数:
11 / 2 = 5…1
5 / 2 = 2…1
2 / 2 = 1…0
1 / 2 = 0…1
将余数从后往前输出,结果:1011
伪代码:
int res[40], idx = 0;
do {
res[idx++] = k % Q;
k /= Q;
} while (k)
结果:y = res[num-1]....res[0]
/*【注意:使用do..while而不是while,因为当十进制数为0时,
用while语句将使得循环跳出,导致结果出错,正确结果应该是y[0] = 0】*/