国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

高精度加法

這篇具有很好參考價(jià)值的文章主要介紹了高精度加法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、算法描述

高精度問(wèn)題是指兩個(gè)數(shù)字非常大,超過(guò)了int,甚至long long的范圍,數(shù)字的位數(shù)甚至能達(dá)到\(10^5\),那么如果要實(shí)現(xiàn)這樣兩個(gè)大數(shù)字的運(yùn)算,需要解決以下兩個(gè)問(wèn)題:

如何存儲(chǔ)?

這樣的兩個(gè)數(shù)字相加是不可能用普通類型來(lái)存儲(chǔ)的,所以我們第一個(gè)要解決的問(wèn)題就是如何存儲(chǔ)高精度數(shù)。

  • 首先讀入兩個(gè)高精度數(shù)一定是先讀入字符串,因?yàn)閯e的類型存儲(chǔ)不了,另外為了方便我們計(jì)算這兩個(gè)數(shù),要轉(zhuǎn)化為用數(shù)組來(lái)存儲(chǔ)這兩個(gè)數(shù)。

  • 由于普通的靜態(tài)數(shù)組是無(wú)法改變長(zhǎng)度的,這就導(dǎo)致初始長(zhǎng)度開(kāi)小了計(jì)算不了,開(kāi)大了會(huì)浪費(fèi),所以我們采用一種可以變長(zhǎng)的數(shù)組vector來(lái)存儲(chǔ)。

  • 另外數(shù)組在前面操作不方便,而在尾部操作更加方便,所以逆序存儲(chǔ)數(shù)字,例如數(shù)字為 \(1234\) ,那么第 \(0\) 位應(yīng)該存儲(chǔ) \(4\) ,第 \(1\) 位應(yīng)該存儲(chǔ) \(3\) ,依此類推。

代碼如下:

string a, b;
cin >> a >> b;

vector<int> A, B;
for (int i = a.size() - 1; i >= 0; --i)	A.push_back(a[i] - '0');	//注意逆序存儲(chǔ)
for (int i = b.size() - 1; i >= 0; --i)	B.push_back(b[i] - '0');

如何計(jì)算?

解決了存儲(chǔ)問(wèn)題接下來(lái)就可以討論如何實(shí)現(xiàn)高精度的加法了。

  • 其實(shí)高精度問(wèn)題就是一個(gè)模擬問(wèn)題,比如小學(xué)列豎式計(jì)算兩個(gè)數(shù)的加法,計(jì)算機(jī)就是在模擬這個(gè)過(guò)程。

  • 遍歷兩個(gè)數(shù)組,只要沒(méi)有超過(guò)當(dāng)前數(shù)的位數(shù),就加上當(dāng)前位數(shù)上的數(shù),即,t += A[i]或者t += B[i],也別忘了加上剛計(jì)算的可能產(chǎn)生的進(jìn)位。

  • 將這個(gè)計(jì)算出來(lái)的和模 \(10\) 后,t % 10加入答案數(shù)組中,并除等于 \(10\) 表示下一位的進(jìn)位,t /= 10

  • 最后產(chǎn)生的一位進(jìn)位有可能超過(guò)這兩個(gè)高精度數(shù)的位數(shù),也別忘了加入答案數(shù)組中。

  • 這里函數(shù)傳參的時(shí)候使用的是引用傳遞,直接在原參數(shù)上操作,不會(huì)拷貝一份,用于提高效率。

經(jīng)過(guò)優(yōu)化之后代碼如下:

vector<int> add(vector<int> &A, vector<int> &B)
{
    vector<int> C;
    int t = 0;
    
    for (int i = 0; i < A.size() || i < B.size(); ++i)
    {
        if (i < A.size())	t += A[i];
        if (i < B.size())	t += B[i];
        
       	C.push_back(t % 10);
        t /= 10;
    }
    if (t)	C.push_back(t);
    
    return t;
}

二、題目描述

給定兩個(gè)正整數(shù)(不含前導(dǎo) \(0\)),計(jì)算它們的和。

輸入格式

共兩行,每行包含一個(gè)整數(shù)。

輸出格式

共一行,包含所求的和。

數(shù)據(jù)范圍

\(1≤整數(shù)長(zhǎng)度≤100000\)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-711590.html

輸入樣例:

12
23 

輸出樣例:

35 

三、題目來(lái)源

AcWing算法基礎(chǔ)課-791.高精度加法

四、源代碼

#include <iostream>
#include <vector>

using namespace std;

const int N = 100010;

vector<int> add(vector<int> &A, vector<int> &B)
{
    vector<int> C;
    int t = 0;
    
    for (int i = 0; i < A.size() || i < B.size(); ++i)
    {
        if (i < A.size())   t += A[i];
        if (i < B.size())   t += B[i];
        
        C.push_back(t % 10);
        t /= 10;
    }
    if (t)  C.push_back(t);
    
    return C;
}

int main()
{
    string a, b;
    cin >> a >> b;
    
    vector<int> A, B;
    for (int i = a.size() - 1; i >= 0; --i) A.push_back(a[i] - '0');
    for (int i = b.size() - 1; i >= 0; --i) B.push_back(b[i] - '0');
    
    vector<int> C = add(A, B);
    for (int i = C.size() - 1; i >= 0; --i) cout << C[i];
    
    return 0;
}

到了這里,關(guān)于高精度加法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • [高精度加法與動(dòng)態(tài)規(guī)劃混合] 數(shù)樓梯

    樓梯有 N N N 階,上樓可以一步上一階,也可以一步上二階。 編一個(gè)程序,計(jì)算共有多少種不同的走法。 一個(gè)數(shù)字,樓梯數(shù)。 輸出走的方式總數(shù)。 樣例輸入 #1 樣例輸出 #1 對(duì)于 60 % 60% 60% 的數(shù)據(jù), N ≤ 50 N leq 50 N ≤ 50 ; 對(duì)于 100 % 100% 100% 的數(shù)據(jù), 1 ≤ N ≤ 5000 1 le N leq 5

    2024年01月21日
    瀏覽(17)
  • 高精度加法,減法,乘法,除法(下)(C語(yǔ)言)

    高精度加法,減法,乘法,除法(下)(C語(yǔ)言)

    前言 上一篇博客我們分享了高精度加法,減法,這一期我將為大家講解高精度乘法和高精度除法。那讓我們開(kāi)始吧! 對(duì)加法和減法感興趣的話就點(diǎn)我 讓我們想想我們平時(shí)做數(shù)學(xué)時(shí)遇見(jiàn)乘法是怎么做的。以下圖為例。 高精度乘法也是這樣的一個(gè)思路,首先我們先把a(bǔ)和b的值儲(chǔ)存

    2024年02月04日
    瀏覽(94)
  • 高精度加法,減法,乘法,除法(上)(C語(yǔ)言)

    高精度加法,減法,乘法,除法(上)(C語(yǔ)言)

    前言 本篇內(nèi)容介紹加法和減法,如果想看乘法和除法就點(diǎn)這里-高精度乘法,除法 加,減,乘,除這些運(yùn)算我們自然信手捏來(lái),就拿加法來(lái)說(shuō),我們要用c語(yǔ)言編程算a+b的和,只需讓sum = a+b即可,可是這是局限的,我們都知道int的表示的最大值為2147483647(32位和64位機(jī)器)。但

    2024年02月03日
    瀏覽(22)
  • 算法筆記——高精度算法(附源碼)

    算法筆記——高精度算法(附源碼)

    ??作者介紹:22級(jí)樹(shù)莓人(計(jì)算機(jī)專業(yè)),熱愛(ài)編程<目前在c++階段, 因?yàn)樽罱鼌⒓有滦怯?jì)劃算法賽道(白佬),所以加快了腳步,果然急迫感會(huì)增加動(dòng)力 ——目標(biāo)Windows,MySQL,Qt,數(shù)據(jù)結(jié)構(gòu)與算法,Linux,多線程,會(huì)持續(xù)分享學(xué)習(xí)成果和小項(xiàng)目的 ??作者主頁(yè):熱愛(ài)編程的

    2023年04月08日
    瀏覽(91)
  • 高精度算法詳解

    高精度算法詳解

    首先要知道為什么需要高精度算法: 高精度算法是 處理大數(shù)字 的數(shù)學(xué)計(jì)算方法,當(dāng)數(shù)字過(guò)大不能用 int 和 long long 存儲(chǔ)時(shí),我們就可以 使用string和vector類型 來(lái)存儲(chǔ)他們的每一位,然后進(jìn)行計(jì)算。 我們可以先把要輸入的兩個(gè)數(shù)字放到vector中存儲(chǔ),注意要 反著存(后邊做加法

    2024年01月17日
    瀏覽(93)
  • 高精度算法筆記·····························

    高精度算法筆記·····························

    加法 減法 乘法 除法 高精度加法的步驟: 1.高精度數(shù)字利用字符串讀入 2.把字符串 翻轉(zhuǎn) 存入兩個(gè)整型數(shù)組A、B 3.從低位到高位,逐位求和,進(jìn)位,存余 4.把數(shù)組C從高位到低位依次輸出 ????????1.2為準(zhǔn)備 ? ? ? ? 3為加法具體實(shí)現(xiàn)(0按位取反為-1,即-1時(shí)結(jié)束等價(jià)于=0) ?

    2024年01月21日
    瀏覽(92)
  • C++高精度算法

    目錄 前言:? 思路: 高精度加法: 高精度減法: 高精度乘法: 高精度除法: ?代碼: 一、高精度加法 二、高精度減法? 三、高精度乘法? 四、高精度除法 最后 ? ? ? ? 計(jì)算機(jī)最初、也是最重要的應(yīng)用就是數(shù)值運(yùn)算。在編程進(jìn)行數(shù)值運(yùn)算時(shí),有時(shí)會(huì)遇到運(yùn)算的精度要求特

    2024年02月14日
    瀏覽(96)
  • 【算法】模擬,高精度

    【算法】模擬,高精度

    ? P1601 A+B Problem(高精) - 洛谷 | 計(jì)算機(jī)科學(xué)教育新生態(tài) (luogu.com.cn) 思路就是模擬,值得注意的就是要用字符串類型輸入。存進(jìn)自己的int數(shù)組時(shí)要倒著存,因?yàn)槿绻钦娴脑挘M(jìn)位會(huì)有點(diǎn)trouble。 時(shí)間復(fù)雜度O(max(m,n)) ?? P1303 A*B Problem - 洛谷 | 計(jì)算機(jī)科學(xué)教育新生態(tài) (lu

    2024年02月09日
    瀏覽(85)
  • C++高精度問(wèn)題

    C++高精度問(wèn)題

    C++中int不能超過(guò)2^31-1,最長(zhǎng)的long long也不能超過(guò)2^63-1,所以我們?cè)陬}目中如果碰到了很長(zhǎng)很長(zhǎng)的數(shù),并且需要進(jìn)行大數(shù)運(yùn)算時(shí),就需要高精度存儲(chǔ)。 由于int和long long的限制,我們要想存放很長(zhǎng)的數(shù)就需要利用數(shù)組存儲(chǔ),C++中可以利用STL中的vector容器存儲(chǔ) 讀?。??由于數(shù)據(jù)很大,

    2024年01月24日
    瀏覽(24)
  • C++基礎(chǔ)算法高精度篇

    C++基礎(chǔ)算法高精度篇

    ??作者主頁(yè):慢熱的陜西人 ??專欄鏈接:C++算法 ??歡迎各位大佬??點(diǎn)贊??關(guān)注??收藏,??留言 主要講解了高精度算法的四種常用的計(jì)算 以下數(shù)字均指位數(shù) ①A + B(精度均在10^6) ②A - B (精度均在10^6) ③A * b (len(A) = 10^6, a = 1000); ④A / b (len(A) = 10^6, a = 1000); Ⅲ. Ⅰ . A

    2024年02月16日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包