AcWing 794. 高精度除法

五迷三道 提交于 2019-12-02 18:19:06

https://www.acwing.com/problem/content/796/

 

#include<bits/stdc++.h>
using namespace std; 
//   A/b   商是c  余数是r 
vector<int> div(vector<int> &A, int b,int &r)  //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);  //商 是这一位整除b 
        r%=b;   //余数 
     } 
     reverse(C.begin(),C.end()); //因为最开始push的是c的最高位,和我们前面定义的大整数存法是反过来的
     //前面定义的大整数乘法是c【0】在最低位,是反过来的。所以要reverse一遍 
     while(C.size()>1&&C.back()==0)  C.pop_back();  //商可能存在前导0 
     return C;
}
int main()
{
    string a;  //a很长,数位多     b很小,数位少 
    int b;
    cin>>a>>b;
    vector<int>A;
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
    int r;//余数 
    auto C=div(A,b,r);
    for(int i=C.size()-1;i>=0;i--) cout<<C[i]; //输出商
    cout<<endl; 
    cout<<r<<endl;  //输出余数 
    return 0;
 } 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!