与高精度乘法一样,高精度除法也是一个大数字除以一个小数字
四种高精度运算的思路都很相似
接下来我们以175/12 = 14 …7 举例讲解
1 第一步
最初 r= 0 即余数是零
然后sum[0] = 1/12 = 0
r= 1 % 12 =1
2 第二步
r = r10 +a =10+7 = 17
r乘十的原因是空出个位
sum[1] = 17/12 = 1
r = r%12 = 5
3 第三步
r = 105+5 =55
sum[2] = 55/ 12 = 4
r= 55%12 = 7
退出循环
最后答案即为14…7
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
using namespace std;
typedef vector<int > v;
string s;
v a; //被除数
int b; //除数
int r ;//余数
v sum;// 答案数组
// sum = a/b
void div(){
for(int i=a.size()-1;i>=0;i--){
r=r*10+a[i];
sum.push_back(r/b);
r %=b ;
}
//翻转的目的是保持输出格式与其余高精度运算一致
reverse(sum.begin(), sum.end());
//pop删除函数并没有真正删除数组这个数,只是取消了对地址的引用
//换个说法,即使们利用pop删掉后,其实还是可以通过下标访问这个元素
//只不过这个元素的地址已经与数组没关系了,只是孤零零的出现在地址当中
while (sum.size() > 1&& sum.back() == 0 ) sum.pop_back();
}
int main(){
cin>>s>>b;
for(int i=s.size()-1;i>=0;i--)a.push_back(s[i]-'0');
div();
for(int i = sum.size()-1;i>=0;i--){
cout<<sum[i];
}
cout<<endl<<r;
return 0;
}