今天去参加腾讯笔试,其中有一道选答题:大数相乘问题。在编写代码的过程,我突然发现以前写的原始的大数相乘是一个很简陋的源码。所以,下午找个时间重新写了一份。
大数相乘:两个超出整型限制的两个数相乘,例如,两个50位的正数相乘。
最简陋的方式,就是按照乘法的计算过程来模拟计算:
1 2
× 3 6
---------- ---- 其中,上标数字为进位数值。
71 2 --- 在这个计算过程中,2×6=12。本位保留2,进位为1.这里是一个简单的计算过程,如果在高位也需要进位的情况下,如何处理?
3 6
-----------
413 2
开始比较简陋的源码就是基本模拟上述的乘法过程:
1 int compute_value( const char *lhs, int lhs_start_index, 2 const char *rhs, int rhs_start_index, 3 char *result ) 4 { 5 int i = 0, j = 0, res_i = 0; 6 int tmp_i = 0; 7 int carry = 0; 8 9 for ( i = lhs_start_index; lhs[i] != '