4.高精度除以低精度
题目叙述:
A/B Problem
题目描述
输入两个整数 \(a,b\),输出它们的商。
输入格式
两行,第一行是被除数,第二行是除数。
输出格式
一行,商的整数部分。
样例 #1
样例输入 #1
10
2
样例输出 #1
5
提示
\(0\le a\le 10^{5000}\),\(1\le b\le 10^9\)。
代码
本题为高精度除以低精度的模板,我们可以使用vector数组来模拟这个过程
#include<vector>
#include<algorithm>
#include<iostream>
using namespace std;
vector<int> a, c;
int b;
void div(vector<int>& a, int b, vector<int>& c) {
long long r = 0;
for (int i = a.size()-1; i >= 0; i--) {
r = r * 10 + a[i]; //计算被除数
c.push_back(r / b); //存商
r %= b; //存余数
}
//将c先翻转过来,方便去除前导零,我们现在翻转以后,去除末尾的所有0即可,然后再从低位到高位输出就可以了
reverse(c.begin(), c.end());
while (c.size() > 1 && c.back() == 0) c.pop_back();
}
int main()
{
string s;
cin >> s >> b;
// 从低位到高位给vector数组赋值
for (int i = s.size() - 1; i >= 0; i--) a.push_back(s[i] - '0');
//调用div函数
div(a, b, c);
//从低位到高位输出c即可
for (int i = c.size() - 1; i >= 0; i--) cout << c[i];
return 0;
}