這篇文章主要介紹C++如何實(shí)現(xiàn)大數(shù)相乘算法,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
成都創(chuàng)新互聯(lián)是專業(yè)的橫縣網(wǎng)站建設(shè)公司,橫縣接單;提供成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行橫縣網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!具體內(nèi)容如下
首先說一下乘法計(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#include #include using namespace std; #define MAX 1010 int main() { string std1, std2; cin>>std1>>std2; int length2 = std1.length(); int length3 = std2.length(); int a[MAX] = {0}; int b[MAX] = {0}; int result[2 * MAX] = {0}; int i = 0, j = 0; //將字符串轉(zhuǎn)移到數(shù)組中,以方便計(jì)算 ,注意是倒敘存儲(chǔ) //即字符串123存為321,為的是將低位放在前面方便計(jì)算 for(i = length2 - 1, j = 0; i >= 0; i--, j++) { a[j] = std1[i] - '0'; } for(i = length3 - 1, j = 0; i >= 0; i--, j++) { b[j] = std2[i] - '0'; } //將結(jié)果儲(chǔ)存在 resullt中,result[i + j] = a[i] * b[j]是關(guān)鍵算法 for(i = 0; i < length2; i++) { for(j = 0; j < length3; j++) { result[i + j] += a[i] * b[j]; } } //從低位到高位進(jìn)行進(jìn)位 for(i = 0; i < (length2+length3); i++) { if(result[i] > 9) { result[i+1] += result[i]/10; result[i] %= 10; } } //將前導(dǎo)0全部剔掉,比如我們結(jié)果是236,在result中 //是這樣存儲(chǔ)的63200……我們需要定位到第一個(gè)不為零的數(shù),它的位置也就是i ,兩數(shù)相乘,位數(shù)最多是兩數(shù)位數(shù)之和 for(i = length2 + lengrh3; i >= 0 ; i--) { if(result[i] == 0) continue; else break; } //接著i繼續(xù)輸出,就是我們的結(jié)果 for(; i >=0; i--) cout< 以上是“C++如何實(shí)現(xiàn)大數(shù)相乘算法”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
當(dāng)前題目:C++如何實(shí)現(xiàn)大數(shù)相乘算法-創(chuàng)新互聯(lián)
文章分享:http://weahome.cn/article/cdppcd.html