Skip to main content

数进制转换

原理

一般来说十进制数 mm 若满足

m=aini+...+a2n2+a1n1+a0n0a{0,1,2,...,n1}m = a_{i}n^{i} + ... + a_{2}n^{2} + a_{1}n^{1} + a_{0}n^{0} \\ a ∈ \{0,1,2,...,n-1\}

那么,我们称新数序列 aiai1...a2a1a0a_{i}a_{i-1}...a_{2}a_{1}a_{0} 为十进制数 mmnn 进制表示。

如果 mm 不为十进制数,那么则需要转换为十进制数。

将 m 进制转换为 n 进制的算法可以通过以下步骤进行描述:

  1. 将 m 进制数转换为十进制数:从最低位开始,将每一位数字乘以 m 的相应幂次,并将它们相加得到十进制数的结果。

  2. 将十进制数转换为 n 进制数:从最高位开始,将十进制数不断除以 n,将每次的余数作为 n 进制数的一位数字。重复这个过程,直到十进制数为 0,得到的余数序列就是 n 进制数的逆序表示。

  3. 反转 n 进制数的逆序表示:将第 2 步得到的余数序列进行反转,得到最终的 n 进制数表示。这一步可以在事先第二步时用栈结构储存数据,然后再将数据出栈实现。

这个算法可以用于将任意进制的数转换为另一个进制的数。你只需要根据具体的进制数和需要转换的进制数,将上述步骤中的 m 和 n 替换为对应的进制数即可。

需要注意的是,对于十进制数和二进制数,它们是最常见的进制表示,也有特殊的转换方法。对于其他进制之间的转换,可以使用上述算法进行通用的转换。

编程实现

// 将 m 进制数转为 10 进制数
int convertToDecimal(int num, int base) {
int decimal = 0;
int multiplier = 1;

while (num != 0) {
int digit = num % 10;
decimal += digit * multiplier;
multiplier *= base;
num /= 10;
}

return decimal;
}
// 将 10 进制数转为 n 进制数
void convertToBase(int num, int base) {
int result[100];
int i = 0;

while (num != 0) {
result[i] = num % base;
num /= base;
i++;
}

for (int j = i - 1; j >= 0; j--) {
printf("%d", result[j]);
}
printf("\n");
}