大整數相乘是個被咱們聽爛了的經典算法題之一,解法各不一樣,今天在公司論壇上看到一個挺高端的算法思路,記錄並分享下。算法
以下圖示例:999*99的計算方法。數組
上圖是按照咱們小學列算式作乘法的基本方法,可是不考慮進位,只是把算出的結果按相應的位置存放着。spa
以圖所示爲例,將計算結果依次存放在一個result數組中。第一輪存下3個81;第二輪從result數組的第二個元素開始存儲,而且和該位置上原來的元素累加,依次計算到第二輪結束,若是有第三輪,仍是這樣的方式,result數組的第3個位置開始存儲,並和以前的數字累加,bulabulabula,直到計算結束,會有個結果存放在result數組中。以本題爲裏,result = {81,162,162,81}。調試
計算結束後,接下來以此處理result數組的每一個元素,result[0]=81,81%10=1,81/10=8(進位),那麼處理完以後result[0]=1,result[1]=162+8=170,後面的元素不變;下面處理result[1] = 170,170%10=0,170/10=17(進位),那麼處理完以後result[0]=1,result[1]=0,result[2]=162+17=179,像這樣以此處理下去,最後,result={1,0,9,8,9},反轉result,即爲你想要獲得的最終計算結果了。blog
這個只是思路,且result數組得是個挺大的數組,具體用C代碼調試就看你的代碼水平了。但願我描述的你能夠看明白,有更好更簡單易懂的方式,歡迎交流哦!方法