高精度除法

高精度除法实现

在处理大整数运算时,直接使用内置的数据类型可能会导致溢出,因此需要使用字符串或数组来存储大整数,并逐位进行运算。本文将介绍如何使用C++实现高精度除法。

代码实现

以下是一个实现高精度除法的完整C++代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <bits/stdc++.h>
using namespace std;

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 = r % b;
}
reverse(c.begin(), c.end());
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;
}

示例输入输出

以下是一些示例输入和对应的输出,帮助理解代码的工作原理。

示例 1

输入:

1
2
12345678901234567890
12345

输出:
1
2
1000054089004
6170

示例 2

输入:

1
2
98765432109876543210
123456789

输出:
1
2
800000004500000036
98765432

示例 3

输入:

1
2
10000000000000000000
999999999

输出:
1
2
10000000001
1

代码说明

输入处理:

  • 使用字符串 a 存储输入的大整数。
  • 将字符串转换为倒序存储的整数数组 A

除法实现:

  • 函数 div 实现大整数与单个整数的逐位除法,并计算余数。

主函数逻辑:

  • 将字符串转换为整数数组,并进行逐位除法计算。
  • 输出结果并打印余数。
作者

Xiongyuqi

发布于

2024-05-30

更新于

2024-05-30

许可协议

评论