高精度除法
1 : 除法与加法、减法、乘法不同,除法是从最高位开始除的,所以一点要注意对大数数组的遍历次序
2 : 除法最终的结果数组是正序的,所以如果要去零,需要从队尾开始去。
3 : 当然你也可以不适用reverse,写法附在下面,但是去零的时候需要从vector头部去,在头部删除元素的效率是要比在尾部低的
C++ 代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> divide(vector<int>& A,int B,int& t){
t = 0;
vector<int> res;
for(int i = A.size() - 1;i >= 0;--i){
t = t * 10 + A[i];
res.push_back(t / B);
t = t % B;
}
//最后的t就是余数
reverse(res.begin(),res.end());
while(res.size() > 1 && res.back() == 0) res.pop_back();
return res;
}
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 t = 0;
vector<int> res = divide(A,b,t);
for(int i = res.size() - 1;i >= 0;--i){
cout << res[i];
}
cout << endl;
cout << t <<endl;
return 0;
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> divide(vector<int>& A,int B,int& t){
t = 0;
vector<int> res;
for(int i = A.size() - 1;i >= 0;--i){
t = t * 10 + A[i];
res.push_back(t / B);
t = t % B;
}
while(res.size() > 1 && res.front() == 0) res.erase(res.begin());
return res;
}
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 t = 0;
vector<int> res = divide(A,b,t);
for(int i = 0;i < res.size();++i){
cout << res[i];
}
cout << endl;
cout << t <<endl;
return 0;
}