以下算法背后的原理是什么:
从十进制转换为另一个基数
的算法设 n 为十进制数。
设 m 为我们要转换为的数字,最初为空。我们将从右到左组成它。
设 b 作为我们要转换为的数字的基数。
重复直到 n 变为 0
将 n 除以 b,让结果为 d,余数为 r。
将余数 r 写为 b 的最左边数字。
设 d 为 n 的新值。
语句:余数r
是结果的最后一位数字。
实际上,将n
分为两部分:可被r
整除的部分和其余部分。我们得到n = d * b + r
0 <= r < b
.
在基b
中,符号是n = c_k * b^k + ... + c_1 * b^1 + c_0 * b^0
。因为除了c_0 * b^0
之外的一切都可以被b
整除,所以等式r = c_0
是平凡的。
对于其余数字,重写
n = c_k * b^k + ... + c_1 * b^1 + c_0 * b^0
如
n = (c_k * b^{k-1} + ... + c_1 * b^0) * b + c_0 * b^0
.
另一方面
n = d * b + r
.
紧接着,
d = c_k * b^{k-1} + ... + c_1 * b^0
.
因此,要找到除最后一个数字之外的所有数字,我们必须解决相同的问题,但要解决d < n
而不是n
。整体正确性现在通过n
归纳来微不足道。