【题目来源】
https://www.acwing.com/problem/content/796/
【题目描述】
给定两个非负整数(不含前导 0) A,B,请你计算 A/B 的商和余数。
【输入格式】
共两行,第一行包含整数 A,第二行包含整数 B。
【输出格式】
共两行,第一行输出所求的商,第二行输出所求余数。
【数据范围】
1≤A的长度≤100000,1≤B≤10000,B 一定不为 0
【输入样例】
7
2
【输出样例】
3
1
【算法分析】
利用C++ STL vector实现高精度除法简洁、高效。
利用C++ STL vector实现高精度除法过程中,需要用到的STL vector的push_back函数知识点简介如下:
#include <bits/stdc++.h>
using namespace std;
int main() {
vector<int> v;
for(int i=0; i<=3; i++) {
v.push_back(i); // -> 0 1 2 3
}
for(int i=0; i<=3; i++) {
cout<<v[i]<<" "; //0 1 2 3
}
cout<<endl;
for(int i=3; i>=0; i--) {
cout<<v[i]<<" "; //3 2 1 0
}
return 0;
}
【程序代码】
#include <bits/stdc++.h>
using namespace std;
// A/b=C...r,A>=0,b>0
vector<int> div(vector<int> &A, int b, int &r){
vector<int> C;
r=0;
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;
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;
}
/*
in:
7
2
out:
3
1
*/
【参考文献】
https://www.acwing.com/blog/content/277/
http://www.cplusplus.com/reference/vector/
https://blog.csdn.net/weixin_41514525/article/details/97613177