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; }