1. 程式人生 > 其它 >c++ 超大整數除法 高精度除法

c++ 超大整數除法 高精度除法

c++ 超大整數除法 高精度除法

解題思路

計算a/b,其中a為大整數,b為普通整數,商為c,餘數為r。
根據手算除法的規則,上一步的餘數記為r,則本次計算的被除數為t=r*10+被除數的本位數值a[i],商t/b,本步餘數為t%b
除法是從最高位開始計算的,所以需要反轉reverse一下,才能保持和前面加減乘一樣的資料儲存

打卡程式碼

#include<bits/stdc++.h>
using namespace std;

vector<int> div(vector<int> a,int b,int& r){
    vector<int> c;
    int t;
    for(int i=a.size()-1;i>=0;--i){
        t=r*10+a[i];
        c.push_back(t/b);
        r=t%b;
    }
    reverse(c.begin(),c.end());
    while(c.size()>1 && c.back() == 0) c.pop_back();
    return c;
}

int main(){
    string s;
    vector<int> a,c;
    int b;
    cin>>s>>b;
    for(int i=s.size()-1;i>=0;--i){
        a.push_back(s[i]-'0');
    }
    int r;
    c=div(a,b,r);
    for(int i=c.size()-1;i>=0;--i){
        cout<<c[i];
    }
    cout<<endl<<r;
    return 0;
}