C++高精度加减运算

该文展示了如何在C++中利用vector进行高精度的加法和减法运算。通过将数字转化为vector存储,然后逐位进行运算,处理了C++无法处理大整数的问题。示例代码分别演示了加法和减法的实现,并提供了输入和输出示例。
摘要由CSDN通过智能技术生成

由于在C++中的数不像Python中的数一样能无限大,由此一但遇到数的位数比较多的时候,就不能进行运算。
因此,我们就需要采取一些其他的方法来进行高精度运算。
高精度运算的方法有很多,我这里主要用的是vector进行模拟。

1、高精度加法运算:

直接上代码

#include<iostream>
#include<vector>
using namespace std;
vector<int> add(vector<int> A, vector<int> B)
{
	int t = 0;//t表示是否进位
	vector<int>C;
	for (int i = 0; i < max(A.size(), B.size()); i++)
	{
		int sum = 0;
		sum += t;
		if (i < A.size())sum += A[i];
		if (i < B.size())sum += B[i];
		C.push_back(sum % 10);
		t = sum / 10;
	}
	if (t)C.push_back(t);
	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');//将字符串转换成vector的形式
	for (int j = b.size() - 1; j >= 0; j--)B.push_back(b[j] - '0');
	vector<int> C = add(A, B);
	for (int i = C.size() - 1; i >= 0; i--)cout << C[i];//输出结果;
}

输入 9999999999999999999999999999999999999999999 9999999999999999999999999999999999999999999 时
输出结果:
在这里插入图片描述

2、高精度减法运算:

直接上代码

#include<iostream>
#include<vector>
using namespace std;
bool cmp(vector<int> A, vector<int> B)
{
	if (A.size() != B.size())return A.size() > B.size();//先进行位数比较
	for (int i = A.size() - 1; i >= 0; i--)
	{
		if (A[i] != B[i])return A[i] > B[i];//位数相同时再从高位到低位进行比较
	}
	return true;
}
vector<int> sub(vector<int> A, vector<int> B)
{
	vector<int> C;
	for (int i = 0, t = 0; i < A.size(); i++)
	{
		t = A[i] - t;//t为借位的情况
		if (i < B.size()) t -= B[i];
		C.push_back((t + 10) % 10);
		if (t < 0) t = 1;
		else t = 0;
	}
	while (C.size() > 1 && C.back() == 0) C.pop_back();//去除前导0
	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');//将字符串转换成vector的形式
	for (int j = b.size() - 1; j >= 0; j--)B.push_back(b[j] - '0');
	vector<int> C;
	if (cmp(A, B)) C = sub(A, B);//分减法过后是正还是负的情况
	else C = sub(B, A), cout << '-';
	for (int i = C.size() - 1; i >= 0; i--) cout << C[i];
}

输入 11111111111111111111111111111111111111111111111111111111111111111111111111111111
22222222222222222222222222222222222222222222222222222222222222222222222222222222
输出结果:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值