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

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

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

??作者主頁(yè):慢熱的陜西人

??專(zhuān)欄鏈接:C++算法

??歡迎各位大佬??點(diǎn)贊??關(guān)注??收藏,??留言

主要講解了高精度算法的四種常用的計(jì)算

C++基礎(chǔ)算法高精度篇,C++算法,算法,c++,開(kāi)發(fā)語(yǔ)言

Ⅲ. 高精度

以下數(shù)字均指位數(shù)

①A + B(精度均在10^6)

②A(yíng) - B (精度均在10^6)

③A * b (len(A) <= 10^6, a <= 1000);

④A / b (len(A) <= 10^6, a <= 1000);

Ⅲ. Ⅰ . A + B:

思路:將兩個(gè)大數(shù)先用字符串保存,然后再倒序存入到數(shù)組中(這是因?yàn)槲覀冊(cè)谶\(yùn)算的時(shí)候會(huì)產(chǎn)生進(jìn)位)。然后再實(shí)現(xiàn)一個(gè)add函數(shù)實(shí)現(xiàn)加法,將運(yùn)算的結(jié)果存儲(chǔ)到一個(gè)數(shù)組中:

代碼:

#include <iostream>
#include <vector>

using namespace std;

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(1);

    return C;
}


int main()
{
    string a, b;
    vector<int> A, B;
    cin >> a >> b; //將A和B存儲(chǔ)在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');
    auto C = add(A, B);

    for (int i = C.size() - 1; i >= 0; --i) printf("%d", C[i]);



    return 0;
}

Ⅲ. Ⅱ . A - B:

思路:存儲(chǔ)思路都是統(tǒng)一的,需要一個(gè)借位t.

每一位的計(jì)算:x = Ai - Bi - t,如果x大于零那么本位減法的結(jié)果就是x,如果x小于零那么需要在x結(jié)果的基礎(chǔ)上加上10

總結(jié)果的計(jì)算:如果A >= B那么結(jié)果就是A - B,如果A < b那么結(jié)果就是-(B - A)

在計(jì)算之前我們要保證每次都是大數(shù)減小數(shù),所以要先實(shí)現(xiàn)一個(gè)cmp函數(shù)來(lái)比較哪一個(gè)數(shù)字大。

代碼:

#include <iostream>
#include <vector>

using namespace std;
bool cmp(vector<int>& A, vector<int>& B)
{
    //位數(shù)不同
    if (A.size() != B.size()) return A.size() > B.size();
    //位數(shù)相同
    for (int i = A.size() - 1; i >= 0; --i)
        if (A[i] != B[i]) return A[i] > B[i];
    return true;
}

vector<int> sub(vector<int>& A, vector<int>& B)
{
    vector <int> C;
    for (int i = 0, t = 0; i < A.size(); ++i)
    {
        //將借位除去
        t = A[i] - t;
        //計(jì)算本位
        if (i < B.size()) t -= B[i];
        C.push_back((t + 10) % 10);
        if (t < 0) t = 1;
        else
            t = 0;
    }
    //去除前導(dǎo)零
    while (C.size() > 1 && C.back() == 0) C.pop_back();
    return C;
}


int main()
{
    string a, b;
    vector<int> A, B;
    cin >> a >> b; //將A和B存儲(chǔ)在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');
    if (cmp(A, B))
    {
        auto C = sub(A, B);
        for (int i = C.size() - 1; i >= 0; --i) printf("%d", C[i]);
    }
    else
    {
        auto C = sub(B, A);
        printf("-");
        for (int i = C.size() - 1; i >= 0; --i) printf("%d", C[i]);
    }
    return 0;
}

Ⅲ. Ⅲ. A * b:

思路:存儲(chǔ)數(shù)據(jù)的思路不變,特別的點(diǎn)在于對(duì)進(jìn)位和本位計(jì)算的處理。

例如:我們要計(jì)算123 * 12。

首先我們將3 * 12 + t 存到t里面,那么本位就是t % 10 = 6 , 而進(jìn)位就是t / 10 = 3 ;

以此類(lèi)推將2 * 12 + t 存到t里面,那么本位就是t % 10 = 7,而進(jìn)位就是t / 10 = 2;

最后我們將1 * 12 + t 存到t里面,那么本位就是t % 10 = 4, 而進(jìn)位就是t / 10 = 1

最后如果t不為零的話(huà),那么最高位的值就是繼續(xù)將t進(jìn)行分解。

代碼:

#include <iostream>
#include <vector>

using namespace std;

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

    return C;
}


int main()
{
    string a;
    int b;
    vector<int> A;
    cin >> a >> b; //將A和B存儲(chǔ)在a和b的字符串中
    for (int i = a.size() - 1; i >= 0; --i) A.push_back(a[i] - '0');

    auto C = mul(A, b);

    for (int i = C.size() - 1; i >= 0; --i) printf("%d", C[i]);

    return 0;
}

Ⅲ. Ⅲ. A / b:

思路:A / B 的話(huà)我們是從高位開(kāi)始計(jì)算的,而且計(jì)算機(jī)每次只能計(jì)算一位。

那么我們每次計(jì)算都將余數(shù)存儲(chǔ)在r中,然后每次都將r * 10,最后再加上除數(shù)的本位,然后再次計(jì)算余數(shù),直到除數(shù)計(jì)算完成。

代碼:

#include <iostream>
#include <vector>

using namespace std;

//A 是除數(shù), b是被除數(shù),r是余數(shù)
vector<int> div(vector<int>& A,int b, int &r)
{
    vector <int> C;
    r = 0;
    for (int i = A.size() - 1; i >= 0; --i)
    {
        r = r * 10 + A[i];
        C.push_back(r / b);
        r %= b;
    }
    //反轉(zhuǎn)為標(biāo)準(zhǔn)的存儲(chǔ)格式
    reverse(C.begin(),C.end());
    //去掉前導(dǎo)零
    while (C.size() > 1 && C.back() == 0) C.pop_back();

    return C;
}


int main()
{
    string a;
    int b;
    int r = 0;
    vector<int> A;
    cin >> a >> b; //將A和B存儲(chǔ)在a和b的字符串中
    for (int i = a.size() - 1; i >= 0; --i) A.push_back(a[i] - '0');

    auto C = div(A, b, r);

    for (int i = C.size() - 1; i >= 0; --i) printf("%d", C[i]);
    cout << endl << r;


    return 0;
}

到這本篇博客的內(nèi)容就到此結(jié)束了。
如果覺(jué)得本篇博客內(nèi)容對(duì)你有所幫助的話(huà),可以點(diǎn)贊,收藏,順便關(guān)注一下!
如果文章內(nèi)容有錯(cuò)誤,歡迎在評(píng)論區(qū)指正

C++基礎(chǔ)算法高精度篇,C++算法,算法,c++,開(kāi)發(fā)語(yǔ)言文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-597774.html

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

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(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)文章

  • 算法之高精度(含實(shí)例與詳解)C語(yǔ)言

    算法之高精度(含實(shí)例與詳解)C語(yǔ)言

    ? ? ? ?高精度本質(zhì)上是一種計(jì)算,由于int型和long long型的存儲(chǔ)的數(shù)據(jù)大小有限。在有符號(hào)定義的情況下,int型為2的31次方減1;在無(wú)符號(hào)定義的情況下,lint型為2的32次方。因此過(guò)于巨大的數(shù)無(wú)法展示,這就用到了高精度來(lái)計(jì)算,其原理為將很大的數(shù)一位一位存在數(shù)組中,最后

    2024年02月06日
    瀏覽(18)
  • 【c++】算法:高精度(經(jīng)典加減乘除){含解析(圖解)}

    【c++】算法:高精度(經(jīng)典加減乘除){含解析(圖解)}

    Hi~?o(* ̄▽?zhuān)?)ブ,今天來(lái)一起看看c++算法之高精度 之后會(huì)持續(xù)更新有關(guān)c++算法系列,歡迎觀(guān)看!(#^.^#) 目錄 前言 使用高精度的目的: 基本方法介紹:? ?一、A+B?problem 基本思路解析: 具體步驟: 代碼如下: 二、A-B problem 基本思路解析: ?編輯 具體步驟: ?代碼如下: ?三

    2024年01月23日
    瀏覽(20)
  • 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++實(shí)現(xiàn)高精度減法

    一、問(wèn)題描述: ? ? ? ?高精度算法是處理大數(shù)字的數(shù)學(xué)計(jì)算方法。在一般的科學(xué)計(jì)算中,會(huì)經(jīng)常算到小數(shù)點(diǎn)后幾百位或者更多,當(dāng)然也可能是幾千億幾百億的大數(shù)字。一般這類(lèi)數(shù)字我們統(tǒng)稱(chēng)為高精度數(shù),高精度算法是用計(jì)算機(jī)對(duì)于超大數(shù)據(jù)的一種模擬加,減,乘,除,乘方

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

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

    ??作者介紹:22級(jí)樹(shù)莓人(計(jì)算機(jī)專(zhuān)業(yè)),熱愛(ài)編程<目前在c++階段, 因?yàn)樽罱鼌⒓有滦怯?jì)劃算法賽道(白佬),所以加快了腳步,果然急迫感會(huì)增加動(dòng)力 ——目標(biāo)Windows,MySQL,Qt,數(shù)據(jù)結(jié)構(gòu)與算法,Linux,多線(xiàn)程,會(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)型 來(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)
  • 【算法】模擬,高精度

    【算法】模擬,高精度

    ? P1601 A+B Problem(高精) - 洛谷 | 計(jì)算機(jī)科學(xué)教育新生態(tài) (luogu.com.cn) 思路就是模擬,值得注意的就是要用字符串類(lèi)型輸入。存進(jìn)自己的int數(shù)組時(shí)要倒著存,因?yàn)槿绻钦娴脑?huà),進(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語(yǔ)言實(shí)現(xiàn))

    眾所周知,整數(shù)在C和C++中以 int , long , long long 三種不同大小的數(shù)據(jù)存儲(chǔ),數(shù)據(jù)大小最大可達(dá) 2^64 ,但是在實(shí)際使用中,我們?nèi)圆豢杀苊獾臅?huì)遇到爆 long long 的超大數(shù)運(yùn)算,這個(gè)時(shí)候,就需要我們使用高精度算法,來(lái)實(shí)現(xiàn)巨大數(shù)的運(yùn)算。 高精度的本質(zhì)是將數(shù)字以字符串的形

    2024年02月05日
    瀏覽(20)
  • 高精度除法【c++實(shí)現(xiàn)】超詳細(xì)講解

    高精度算法分為兩種,高精除以低精和高精除以高精。不要看都是除法,就認(rèn)為原理類(lèi)似,其實(shí)是有很大差距的。讓我們一起來(lái)學(xué)習(xí)吧! 有句話(huà)說(shuō)在前面,如果除數(shù)等于0,就不要算了,不成立。( 如果你忘了這個(gè)知識(shí),小學(xué)數(shù)學(xué)老師饒不了你 ) 高精度除低精度,原理是模

    2024年02月13日
    瀏覽(92)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包