和小学的除法一样的,r是一个搬运工。
#include<iostream>
#include<vector>//需要用到容器
#include<algorithm>//需要用到一个reverse函数
using namespace std;
vector<int> div(vector<int> &A,int b,int &r)//因为要返回余数,所以r需要使用引用传递
{
vector<int> c;//存储答案的容器
r=0;//余数的初始值是0
for(int i=A.size()-1;i>=0;i--)
{
r=r*10+A[i];//r在这里其实很像一个搬运工,这一部分其实不太好讲,如果你自己手推一遍这个过程就能够明白了
c.push_back(r/b);
r=r%b;
}
reverse(c.begin(),c.end());//将结果反转一下,好去掉前导零
while(c.size()>1&&c.back()==0) c.pop_back();//去掉前导零,如果答案就是零的话不用去
return c;
}
int main()
{
string a;
cin>>a;//输入一个大数字,以字符串的形式来输入
int b;
cin>>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);//使用c来存储答案
for(int i=c.size()-1;i>=0;i--)cout<<c[i];//输出答案
cout<<endl<<r;//输出余数
return 0;
}