在C++中遇到高精度乘低精度、高精度除低精度的运算我们无法直接进行运算,需要通过其他的方法来进行辅助运算。
高精度乘低精度、
直接上代码:
#include<iostream>
#include<vector>
using namespace std;
vector<int> mul(vector<int> A, int b)
{
vector<int> C;
int t = 0;//t用于进位
for (int i = 0; i < A.size() || t; i++)
{
if (i < A.size()) t += A[i] * b;
C.push_back(t % 10);
t /= 10;
}
while (C.size() > 1 && C.back() == 0) C.pop_back();//去除前导0
return C;
}
int main()
{
string a;
int b;
cin >> a >> b;//以字符串的形式输入a
vector<int>A;
for (int i = a.size() - 1; i >= 0; i--)A.push_back(a[i] - '0');//将字符串a变为vector的形式
vector<int> C = mul(A, b);
for (int i = C.size() - 1; i >= 0; i--)cout << C[i];//将结果输出
}
输入
9999999999999999999999999999999999999999999999999999999
2
输出结果:
高精度除低精度
直接上代码
#include<iostream>
#include<vector>
using namespace std;
vector<int> div(vector<int> A, int b, int &x)
{
vector<int> C;
x = 0;//模数
for (int i = A.size() - 1; i >= 0; i--)
{
x = x * 10 + A[i];
C.push_back(x / b);
x %= b;
}
reverse(C.begin(), C.end());//进行调转
while (C.size() > 1 && C.back() == 0) C.pop_back();//去除前导0
return C;
}
int main()
{
string a;
int b;
cin >> a >> b;//以字符串的形式输入a
vector<int>A;
for (int i = a.size() - 1; i >= 0; i--)A.push_back(a[i] - '0');//将字符串a变为vector的形式
int x;
vector<int>C= div(A, b, x);
for (int i = C.size() - 1; i >= 0; i--) cout << C[i];//输出余数
cout << endl << x << endl;//输出模数
}
输入:
99999999999999999999999999999999999999999999999999999998
9
输出结果: