zl程序教程

您现在的位置是:首页 >  其他

当前栏目

高精度加法,模拟大数的加法运算

模拟 运算 加法 高精度 大数
2023-06-13 09:13:09 时间

在处理特别大的数相加特别大的数的时候,long long不能直接通过加法算出结果的时候,可以通过高精度算法处理这些数的相加具体·思路如下;

首先 1 . 这些数存到数组的时候该如何排列,是个位放在第一位还是最后一位放到第一位,由于数的相加的候常常出现进位,常在最后一位加上一个数,而加上数的话往往在数组最后一位加上数比较方便,所以我们把第个位放在数组第一位

2.其次在调用模拟大数相加的函数中,我们该如何处理同一位上数相加出现的进位呢,我们可以设置一个 t 存储数组上某位相加最后吧  t%10 ,就可以得到想要的数,同时在 t / 10 如果 t 会的得到 1 或者 0.

3.最后如果 t 不等于 0 的话,得到的数最后一位还得加上1

代码如下·(摘自acwing的y总思路)

#include <bits/stdc++.h>
using namespace std;
vector<int> add(vector<int> &A,vector<int> &B)
{
	vector<int> C;
	
	int  t = 0; //进位
	for (int i = 0;i < A.size()|| i < B.size(); i++)
	{
		if(i < A.size())  t += A[i];
		if(i < B.size())  t += B[i];
		C.push_back(t % 10);
		t /= 10;
	} 
	if(t)  C.push_back(1);
	return C;
}
int main()
{
    string a,b;
	vector<int> A,B;
	cin >> a >> b;  //a = "123456" 
    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');
	
	vector <int> C= add(A,B);
	
	for(int i = C.size() - 1;i >= 0;i --)  printf("%d",C[i]); 
	
}