题目描述
高精度除法
样例
#include<iostream>
#include<vector>
#include<algorithm> //reverse函数
#include<string>
using namespace std;
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]; //每一步除后的余数*10+A数组的下一位构成被除数
C.push_back(r/b); //被除数对除数b取整压入结果数组中 ,,从高位开始压入,即下标从小到大对应数位从高到低
r=r%b; //被除数对除数b取余作为下一步的余数
}
reverse(C.begin(),C.end()); //将数组整个颠倒,则可将数位从高到低对应从后往前输出
while(C.size()>1&&C.back()==0) C.pop_back(); //消除前导0
return C;
}
int main()
{
string a;
int b;
cin>>a>>b;
int r;
vector<int> A;
for(int i=a.size()-1;i>=0;i--)A.push_back(a[i]-'0');
auto C=div(A,b,r);
for(int i=C.size()-1;i>=0;i--)cout<<C[i];
cout<<endl<<r;
return 0;
}