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