这个题目的解法就是它的名字:高精度加法;
算法思想:高精度加法的思想就是个模拟人脑加法的一个过程,我们对两个数字进行加法时先是对最低位进行相加,如果相加大于十那么就保留个位然后再向后面进一位以此类推直到加到最高位为止。
实现方法:当我们对两个大整数相加时,我们可以用字符串来读入两个大整数的值再将读入的值传到两个数组中去,然后创建一个变量t用来储存数组对应元素相加的值,同时对t进行%10的操作获取t的个位,然后再对t进行/10的操作来获取是否进位。
注意:在用数组读入两个大整数的值的时候,整数的各个位数应该应该从小到大一次读入。意思是说整数的个位应该放在数组的第一位,十位放在数组的第二位以此类推。例如:整数时12345,那么读入数组时应该是{5,4,3,2,1}。因为在两个整数进行相加时可能会发生进位从而得数要增加一位,如果说数组第一位就存入整数的最大位数的话那么进位时则需要将数组的每一个数都往后移一位,所以要将最大位数放在最后,那么进位的时候只需往数组后面加一个位置就行。
代码实现:
#include<iostream>
#include<string>
#include<vector>
#define int long long
using namespace std;
const int N=1e6 +10;
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++)//只要A或B位数不为0就进行循环
{
if(i<A.size()) t+=A[i];
if(i<B.size()) t+=B[i];
c.push_back(t%10);//将t的个位存入答案数组
t/=10;//储存进位
}
if(t)c.push_back(1);//如果最后位数相加有进位那么就在最后位上加1;
return c;
}
signed main()
{
string a,b;
vector<int> A,B;
cin>>a>>b;//读入两个大整数1234 4567
for(int i=A.size()-1;i>0;i--)A.push_back(a[i]-'0');//将大整数反序输入数组当中 4321
for(int i=B.size()-1;i>0;i--)B.push_back(a[i]-'0');// 7654
auto c=add(A,B);//调用加法函数
for(int i=c.size()-1;i>=0;i--) printf("%d",c[i]);
return 0;
}