在寻找一种有效的算法来乘以两个大数时,我在论坛上发现了以下C语言方法:
...
typedef unsigned long long ULL;
ULL multiply (ULL a,ULL b)
{
ULL result = 0;
while(a > 0)
{
if(a & 1)
{
result += b;
}
a >>= 1;
b <<= 1;
}
return result;
}
...
上述算法无需乘法操作,而只使用位移和加法操作(因此更快)。
我检查过该方法的正确性,但我并不完全理解它是如何工作的。有一个解释会很有帮助。