高精度除法:
有一个 整数C[]和一个余数r
第一个操作的是最高位,但我们存储高精度数时A[0]存储的是数的个位,所以我们要从高精度数的size() 1位开始操作
每次除法之后会有一个余数概念,当前位上要除以b的数为:r * 10 + A[i],C[i]记录本位上的商,C.push_back(r / b);若除不尽会产生余数,本位上的余数为:r %= b;
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//C = A / b ... r;C是商,r是余数
vector<int> div(vector<int> A,int b,int &r){//r是余数
vector<int> C;
//高精度除法先操作高位,所以高位在最前面,但我们在存储数字的时候个位在最前面,所以在操作A数组的时,从后往前操作
for(int i = A.size() - 1; i >= 0;i --){
r = r * 10 + A[i];
C.push_back(r / b);
r %= b;
}
reverse(C.begin(),C.end());
while(C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}
int main(){
string a;
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 = 0;
auto C = div(A,b,r);
for(int i = C.size() - 1;i >= 0;i --) printf("%d",C[i]);
cout << endl << r << endl;
return 0;
}