欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2019年09月18日 08:52:26   作者:WinOneKey  
這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)大數(shù)相乘算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

從低位向高位乘,在豎式計算中,我們是將乘數(shù)第一位與被乘數(shù)的每一位相乘,記錄結(jié)果之后,用第二位相乘,記錄結(jié)果并且左移一位,以此類推,直到計算完最后一位,再將各項結(jié)果相加,得出最后結(jié)果。
計算的過程基本上和小學(xué)生列豎式做乘法相同。為編程方便,并不急于處理進(jìn)位,而將進(jìn)位問題留待最后統(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]開始向高位逐位處理進(jìn)位問題。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];

另外進(jìn)位時要處理,當(dāng)前的值加上進(jìn)位的值再看本位數(shù)字是否又有進(jìn)位;前導(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];
}
}
 
//從低位到高位進(jìn)行進(jìn)位
 
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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言非遞歸后序遍歷二叉樹

    C語言非遞歸后序遍歷二叉樹

    這篇文章主要為大家詳細(xì)介紹了C語言非遞歸后序遍歷二叉樹,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • vscode?采用C++17版本進(jìn)行編譯的實現(xiàn)

    vscode?采用C++17版本進(jìn)行編譯的實現(xiàn)

    本文主要介紹了vscode?采用C++17版本進(jìn)行編譯,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++中實現(xiàn)把表的數(shù)據(jù)導(dǎo)出到EXCEL并打印實例代碼

    C++中實現(xiàn)把表的數(shù)據(jù)導(dǎo)出到EXCEL并打印實例代碼

    這篇文章主要介紹了實現(xiàn)把表的數(shù)據(jù)導(dǎo)出到EXCEL并打印實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • C語言實現(xiàn)單詞小助手功能完善版

    C語言實現(xiàn)單詞小助手功能完善版

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)單詞小助手功能的完善版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • c語言中聯(lián)合體和枚舉用法詳解

    c語言中聯(lián)合體和枚舉用法詳解

    結(jié)構(gòu)體、聯(lián)合體是C語言中的構(gòu)造類型,結(jié)構(gòu)體我們平時應(yīng)該都用得很多,下面這篇文章主要給大家介紹了關(guān)于c語言中聯(lián)合體和枚舉用法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • C語言實現(xiàn)天氣信息管理系統(tǒng)

    C語言實現(xiàn)天氣信息管理系統(tǒng)

    這篇文章主要介紹了C語言實現(xiàn)天氣信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • C語言實現(xiàn)輸入ascii碼,輸出對應(yīng)的字符方式

    C語言實現(xiàn)輸入ascii碼,輸出對應(yīng)的字符方式

    這篇文章主要介紹了C語言實現(xiàn)輸入ascii碼,輸出對應(yīng)的字符方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • C++實現(xiàn)通訊錄系統(tǒng)項目實戰(zhàn)

    C++實現(xiàn)通訊錄系統(tǒng)項目實戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)通訊錄系統(tǒng)項目實戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++ Vector迭代器失效問題的解決方法

    C++ Vector迭代器失效問題的解決方法

    最近我學(xué)習(xí)了C++中的迭代器失效問題,迭代器失效問題是非常非常重要的,所以特意整理出來一篇文章供我們一起復(fù)習(xí)和學(xué)習(xí)
    2022-08-08
  • C/C++線程退出的四種方法小結(jié)

    C/C++線程退出的四種方法小結(jié)

    本文主要介紹了C/C++線程退出的四種方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評論