(高精度)大數乘除法 C++實現


前言

上一篇文章,我們實現了(高精度)大數的加減法,接下來我們一起實現下大數的乘除法,由於算法比較簡單,和我們小學學的普通的四則運算法則類似。

這里的乘除法均實現的是一個大數 乘(除)一個int型的整數。

下面是實現代碼。

代碼

#include <iostream>
#include <vector>

using namespace std;
//乘法
vector<int> mul(vector<int> &A, int b)
{
    vector<int> C;//結果數組
    int t=0;
    for(int i=0;i<A.size()||t;i++)
    {
        if(i<A.size()) t+=A[i]*b;
        C.push_back(t%10);
        t/=10;
    }
    return C;
}
//除法
vector<int> div(vector<int> &A,int b,int &k)
{
    vector<int> C;//保存商
    k=0;//保存余數
    for(int i=A.size()-1;i>=0;i--)
    {
        k=k*10+A[i];
        C.push_back(k/b);
        k%=b;
    }
    while(C.size()>=1&&C.front()==0) C.erase(C.begin());//消除前導0
    return C;
}

int main()
{
    string a,op;
    vector<int> A;
    int b;
    cin >> a >> op >> b;
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
    if(op=="mul")
    {
        auto C = mul(A,b);
        cout << "積:";
        for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);
    }
    if(op=="div")
    {
        int k=0;
        auto C = div(A,b,k);
        cout << "商:";
        for(auto c:C) cout << c;
        if(k!=0)
            cout << " 余: " << k <<endl;
    }
    return 0;
}

輸入輸出測試

輸入 #1

99999999 mul 1234

輸出 #1

積:123399998766

輸入 #2

10000000000000 div 9

輸出 #2

商:1111111111111 余: 1

更多內容大家可以訪問我的個人博客:一只大大怪


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM