欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

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

這篇文章主要介紹C++如何實現(xiàn)大數(shù)相乘算法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

目前創(chuàng)新互聯(lián)建站已為近1000家的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)頁空間、網(wǎng)站運營、企業(yè)網(wǎng)站設計、玉山網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

具體內(nèi)容如下

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

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

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

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

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

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

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

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

結果就是6625。

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

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

下面是C++代碼實現(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;
//將字符串轉移到數(shù)組中,以方便計算 ,注意是倒敘存儲
//即字符串123存為321,為的是將低位放在前面方便計算 
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';
}
//將結果儲存在 resullt中,result[i + j] = a[i] * b[j]是關鍵算法 
for(i = 0; i < length2; i++)
{
for(j = 0; j < length3; j++)
{
result[i + j] += a[i] * b[j];
}
}
 
//從低位到高位進行進位
 
for(i = 0; i < (length2+length3); i++)
{
if(result[i] > 9)
{
result[i+1] += result[i]/10;
result[i] %= 10; 
}
}
//將前導0全部剔掉,比如我們結果是236,在result中
//是這樣存儲的63200……我們需要定位到第一個不為零的數(shù),它的位置也就是i ,兩數(shù)相乘,位數(shù)最多是兩數(shù)位數(shù)之和
 
for(i = length2 + lengrh3; i >= 0 ; i--)
{
if(result[i] == 0) continue;
else break;
}
//接著i繼續(xù)輸出,就是我們的結果 
for(; i >=0; i--)
cout<<result[i];
return 0;
}

以上是“C++如何實現(xiàn)大數(shù)相乘算法”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

新聞標題:C++如何實現(xiàn)大數(shù)相乘算法
標題URL:http://chinadenli.net/article16/jiocgg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供域名注冊小程序開發(fā)網(wǎng)站策劃、微信小程序靜態(tài)網(wǎng)站、企業(yè)網(wǎng)站制作

廣告

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

小程序開發(fā)