高精度的相关运算(加减乘)

直接上代码

#include <iostream>
#include <vector>
using namespace std;
vector<int>add(vector<int>&A,vector<int>&B)
{
    
    
	cout << "高精度加法:\n";
	if (A.size() < B.size())
		return add(B, A);
	int t = 0; vector<int>C;
	for (int i = 0; i < A.size(); i++)
	{
    
    
		t += A[i];
		if (i < B.size())
			t += B[i];
		C.push_back(t % 10);
		t /= 10;
	}
	if (t)
		C.push_back(t);
	while (C.back() == 0 && C.size() > 1)
		C.pop_back();
	for (int i = C.size() - 1; i >= 0; i--)
	{
    
    
		cout << C[i];
	}
	cout << endl;
	return C;
}
vector<int> solve(vector<int>& A, vector<int>& B)
{
    
    
	cout << "高精度减法:\n";
	if (A.size() < B.size())
		return solve(B, A);
	int t = 0; vector<int>C;
	for (int i = 0; i < A.size(); i++)
	{
    
    
		t = A[i] - t;
		if (i < B.size())
			t -= B[i];
		C.push_back(((t + 10) % 10));
		if (t<0)
			t = 1;
		else
			t = 0;
	}
	while (C.back() == 0 && C.size() >= 1)
		C.pop_back();
	for (int i = C.size() - 1; i >= 0; i--)
	{
    
    
		cout << C[i];
	}
	cout << endl;
	return C;
}
vector<int> mul(vector<int>&A,int x)
{
    
    
	cout << "高精度乘低精度:\n";
	vector<int>C; int t = 0;
	for (int i = 0; i < A.size(); i++)
	{
    
    
		t += A[i] * x;
		C.push_back(t % 10);
		t /= 10;
	}
	if (t)
		C.push_back(t);
	for (int i = C.size() - 1; i >= 0; i--)
	{
    
    
		cout << C[i];
	}
	return C;
}
int main()
{
    
    
	string a, b;
	cin >> a >> b;
	vector<int>A, B;
	for (int i = a.size()-1; i>=0;i--)
	{
    
    
		A.push_back(a[i] - '0');
	}
	for (int i = b.size() - 1; i >= 0; i--)
	{
    
    
		B.push_back(b[i] - '0');
	}
	
	solve(A, B);
	add(A, B);
	mul(A, 10);
	system("pause");
	return 0;
}

高精度乘高精度

									高精度乘以高精度
#include <iostream>
#include <string>
using namespace std;
int Array1[1000010], Array2[1000000], cmp[1010000];
int main()
{
    
    
	string a, b;
	cin >> a >> b;
	for (int i = 0; i < a.size(); i++)
	{
    
    
		Array1[i] = a[a.size() - 1 - i] - '0';
	}
	for (int i = 0; i < b.size(); i++)
	{
    
    
		Array2[i] = b[b.size() - 1 - i] - '0';
	}
	for (int i = 0; i < a.size(); i++)
	{
    
    
		for (int j = 0; j < b.size(); j++)
		{
    
    
			cmp[i + j] += (Array1[i] * Array2[j]);
			cmp[i + j + 1] += (cmp[i + j] / 10);
			cmp[i + j] %= 10;
		}
	}
	int h = a.size() + b.size();
	for (int i = 0;; i++)
	{
    
    
		if (cmp[i] == 0)
			h--;
		else
			break;
	}
	for (int i = h; i >= 0; i--)
	{
    
    
		cout << cmp[i];
	}
	system("pause");
	return 0;

猜你喜欢

转载自blog.csdn.net/qq_51721904/article/details/121106721
今日推荐