中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

C++中怎么實(shí)現(xiàn)大數(shù)相乘算法

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

創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站、網(wǎng)站重做改版、新華網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5技術(shù)、商城系統(tǒng)網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為新華等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

首先說一下乘法計(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,下面是存儲結(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<iostream>#include<string>#include<cstdio>  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ì)算 ,注意是倒敘存儲//即字符串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é)果儲存在 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中//是這樣存儲的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<<result[i];return 0;}

關(guān)于C++中怎么實(shí)現(xiàn)大數(shù)相乘算法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

網(wǎng)站題目:C++中怎么實(shí)現(xiàn)大數(shù)相乘算法
本文來源:http://www.rwnh.cn/article14/igjjde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版外貿(mào)網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司
双鸭山市| 天津市| 仁布县| 黔西| 穆棱市| 乳山市| 仁怀市| 鱼台县| 涿鹿县| 海门市| 大埔区| 安图县| 周口市| 和林格尔县| 平安县| 建水县| 静海县| 尼勒克县| 炉霍县| 奎屯市| 舞阳县| 大竹县| 冀州市| 阿勒泰市| 建德市| 娱乐| 东港市| 西盟| 朔州市| 晋宁县| 南平市| 台东市| 志丹县| 蛟河市| 黄陵县| 徐汇区| 通道| 榆中县| 易门县| 南江县| 汪清县|