国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

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

2020-01-26 13:24:41
字體:
供稿:網(wǎng)友

本文實例為大家分享了C++實現(xiàn)大數(shù)相乘的具體代碼,供大家參考,具體內(nèi)容如下

首先說一下乘法計算的算法:同樣是模擬人工計算時的方法。

從低位向高位乘,在豎式計算中,我們是將乘數(shù)第一位與被乘數(shù)的每一位相乘,記錄結(jié)果之后,用第二位相乘,記錄結(jié)果并且左移一位,以此類推,直到計算完最后一位,再將各項結(jié)果相加,得出最后結(jié)果。
計算的過程基本上和小學(xué)生列豎式做乘法相同。為編程方便,并不急于處理進位,而將進位問題留待最后統(tǒng)一處理。
我們以125*53為例來說明計算過程:

1、先算125*3,3*5得到15個1,3*2得到6個10,3*1得到3個100,下面是存儲結(jié)果的數(shù)組的形式

2、接下來算125*5,5*5得到25個10,2*5得到10個100,5*1得到5個1000;

3、乘法過程完畢。接下來從 a[0]開始向高位逐位處理進位問題。a[0]留下5,把1 加到a[1]上,a[1]變?yōu)?2 后,應(yīng)留下2,把3 加到a[2]上……最終使得a里的每個元素都是1 位數(shù),結(jié)果就算出來了

結(jié)果就是6625。

總結(jié)一個規(guī)律:即一個數(shù)的第i 位和另一個數(shù)的第j 位相乘所得的數(shù),一定是要累加到結(jié)果的第i+j 位上。這里i, j 都是從右往左,從0 開始數(shù)。
即:ans[i+j] = a[i]*b[j];

另外進位時要處理,當(dāng)前的值加上進位的值再看本位數(shù)字是否又有進位;前導(dǎo)清零。

下面是C++代碼實現(xiàn):

#include<iostream>#include<string>#include<cstdio>  using namespace std;#define MAX 1010   int main(){string std1, std2;cin>>std1>>std2;int length1 = std1.length();int length2 = std2.length();int a[MAX] = {0};int b[MAX] = {0};int result[2 * MAX] = {0};int i = 0, j = 0;//將字符串轉(zhuǎn)移到數(shù)組中,以方便計算 ,注意是倒敘存儲//即字符串123存為321,為的是將低位放在前面方便計算 for(i = length1 - 1, j = 0; i >= 0; i--, j++){a[j] = std1[i] - '0';}for(i = length2 - 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 < length1; i++){for(j = 0; j < length2; j++){result[i + j] += a[i] * b[j];}} //從低位到高位進行進位 for(i = 0; i < (length1+length2); i++){if(result[i] > 9){result[i+1] += result[i]/10;result[i] %= 10; }}//將前導(dǎo)0全部剔掉,比如我們結(jié)果是236,在result中//是這樣存儲的63200……我們需要定位到第一個不為零的數(shù),它的位置也就是i ,兩數(shù)相乘,位數(shù)最多是兩數(shù)位數(shù)之和 for(i = length1 + lengrh2; i >= 0 ; i--){if(result[i] == 0) continue;else break;}//接著i繼續(xù)輸出,就是我們的結(jié)果 for(; i >=0; i--)cout<<result[i];return 0;}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 西乌珠穆沁旗| 清水河县| 五常市| 滦南县| 嵊泗县| 通榆县| 贵阳市| 册亨县| 历史| 鄯善县| 四子王旗| 永泰县| 丰县| 巴彦淖尔市| 东安县| 张家界市| 东方市| 宜兴市| 宜君县| 浦东新区| 大化| 永州市| 裕民县| 九龙坡区| 遂昌县| 济宁市| 宜兰市| 枞阳县| 建瓯市| 桑植县| 晴隆县| 荣成市| 梁山县| 卓尼县| 盘锦市| 金门县| 宿松县| 厦门市| 龙岩市| 通化市| 沧州市|