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;
}
posted @ 2022-05-21 15:37  小呆瓜瓜  阅读(907)  评论(0编辑  收藏  举报