洛谷P1480 A/B Problem

Tomorrowland / 2024-08-07 / 原文

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;
}

代码的工作原理和实现过程