P进制转Q进制
- 将P进制数x转换为十进制数y。
- 将十进制数y转换为Q进制数z。
P进制转十进制
按权相加法:
int pTod(int x, int P) { // x为P进制数
int y = 0, weight = 1; // y为十进制结果,weight为权重
while (x != 0) {
y = y + (x % 10) * weight; // x的个位按权相加
x /= 10;
weight *= P; // weight为1,P,P^2,P^3,...
}
return y;
}
十进制转Q进制
除基取余法:
#include <stdio.h>
#define MaxSize 10000
int z[MaxSize]; // z存放q进制数结果
int dToq(int y, int Q) { // y为十进制数
int num = 0; // num为z数组下标
do {
z[num++] = y % Q; // 取余
y /= Q; // 除基
} while (y != 0);
return num; // 返回q进制数位数
}
void printZ(int num) { // 输出q进制数z
for (int i = num - 1; i >= 0; --i) // 从后往前输出
printf("%d", z[i]);
}
用do-while的原因是为了使y == 0时,num[0] = 0。