新聞中心
這篇文章給大家介紹C++中怎么實(shí)現(xiàn)大數(shù)相乘算法,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

首先說一下乘法計(jì)算的算法:同樣是模擬人工計(jì)算時(shí)的方法。
從低位向高位乘,在豎式計(jì)算中,我們是將乘數(shù)第一位與被乘數(shù)的每一位相乘,記錄結(jié)果之后,用第二位相乘,記錄結(jié)果并且左移一位,以此類推,直到計(jì)算完最后一位,再將各項(xiàng)結(jié)果相加,得出最后結(jié)果。計(jì)算的過程基本上和小學(xué)生列豎式做乘法相同。為編程方便,并不急于處理進(jìn)位,而將進(jìn)位問題留待最后統(tǒng)一處理。我們以125*53為例來說明計(jì)算過程:
1、先算125*3,3*5得到15個(gè)1,3*2得到6個(gè)10,3*1得到3個(gè)100,下面是存儲(chǔ)結(jié)果的數(shù)組的形式
2、接下來算125*5,5*5得到25個(gè)10,2*5得到10個(gè)100,5*1得到5個(gè)1000;
3、乘法過程完畢。接下來從 a[0]開始向高位逐位處理進(jìn)位問題。a[0]留下5,把1 加到a[1]上,a[1]變?yōu)?2 后,應(yīng)留下2,把3 加到a[2]上……最終使得a里的每個(gè)元素都是1 位數(shù),結(jié)果就算出來了
結(jié)果就是6625。
總結(jié)一個(gè)規(guī)律:即一個(gè)數(shù)的第i 位和另一個(gè)數(shù)的第j 位相乘所得的數(shù),一定是要累加到結(jié)果的第i+j 位上。這里i, j 都是從右往左,從0 開始數(shù)。即:ans[i+j] = a[i]*b[j];
另外進(jìn)位時(shí)要處理,當(dāng)前的值加上進(jìn)位的值再看本位數(shù)字是否又有進(jìn)位;前導(dǎo)清零。
下面是C++代碼實(shí)現(xiàn):
#include 關(guān)于C++中怎么實(shí)現(xiàn)大數(shù)相乘算法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
當(dāng)前文章:C++中怎么實(shí)現(xiàn)大數(shù)相乘算法-創(chuàng)新互聯(lián)
分享路徑:http://www.dlmjj.cn/article/dchcdg.html


咨詢
建站咨詢
