目录
一:高精度除法的意义
答:高精度除法法适用于数位很多的数字的除法,比如两个数字a和b,len(a)= 100,说明a有一百位,显然int和long long int都无法存储这么大的数据,这时候这需要高精度除法来实现对两个数字的相除。在实际算法中,一般默认一个数字的数位特别大但是另一个数字的数位不算大
注:python和java内部有高精度减法的库函数,所以不需要实现,但是c++没有,需要手动实现
二:题目描述
三:算法思路
实际上就是模拟人类除法的步骤即可
1.用a以字符串的形式读入,b直接以整数的形式读入,用r来存储余数
2.用vectot<int>A来接收,从低位开始赋值
3.高精度乘法的算法默认一个数值的位数很多,另一个位数不多
4.其余精度算法都是从低位开始循环,但是除法的循环是从高位开始循环
5.11111除以9会出现前导0,需要去掉前导0
四:多年无误算法模板
#include <iostream>
#include <vector>
#include <algorithm>
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 %= b;
}
reverse(C.begin(), C.end());
while (C.size() > 1 && C.back() == 0) C.pop_back();//去掉前导0
return C;
}
int main()
{
string a;
vector<int> A;
int B;
cin >> a >> B;
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 -- ) cout << C[i];
cout << endl << r << endl;
return 0;
}
创作不易,建议点赞+收藏+关注,以免变成付费资源或者找不到宝贝文章了。
基础集训结束后将开展拔高系列