先说要证明的结论:同进制下,一个 m 位的数乘一个 n 位的数,乘积不超过 m+n 位。
证法一:
下面用多项式表示 x 进制的数,数 a 有 m 位,数 b 有 n 位:
a=∑i=0m−1aixi(0≤ai<x,ai∈N,am−1≠0)
b=∑i=0n−1bixi(0≤bi<x,bi∈N,bn−1≠0)
根据多项式的乘积运算可得:
a⋅b=∑i=0m−1∑j=0n−1aibjxi+j
因为这个结果并没有进位,所以看不出两数积的位数,但可以知道至少有 m+n-1 位。
现在考虑 a,b 都取最大值的情况,其乘积结果也是最大的,此时取最大位数:
令
a=∑i=0m−1(x−1)xi,b=∑i=0n−1(x−1)xi
易知:
a⋅b<(a+1)⋅b
而
(a+1)⋅b=xm⋅∑i=0n−1(x−1)⋅xi=∑i=0n−1(x−1)⋅xm+i
容易看出
∑i=0n−1(x−1)⋅xm+i(不存在进位问题)是一个 m+n 位的数,所以一个 m 位的数乘一个 n 位的数,乘积不可能超过 m+n 位。
证法二:
首先有不等式成立:
⌊a⌋+⌊b⌋≤⌊a+b⌋≤⌊a⌋+⌊b⌋+1
而一个 x 进制的数 a,其位数为
⌊logxa⌋+1。
假设有
c=a⋅b,a 的位数为 m,b 的位数为 n。
数 c 的位数为
⌊logxc⌋+1=⌊logxa⋅b⌋+1=⌊logxa+logxb⌋+1
由上面的不等式可得
⌊logxa+logxb⌋+1≤⌊logxa⌋+1+⌊logxb⌋+1
又
⌊logxa⌋+1=m,⌊logxb⌋+1=n
所以乘积 c 的位数不超过 m+n。