两个超大整数的相加问题
大整数相加问题,最核心的问题就是怎样处理每位数的相加以及进位的处理问题。
另外一点就是,大整数如何存储能够使得,两数相加时,更加容易处理。
此代码中,给出的思想就是,首先用字符串类型接收两个大整数,具体存储每位数用vector存储,此时要注意,为了计算方便,存放在vector中时,按照由低位到高位存储,为了方便处理进位问题。
在进行按位相加时,要理清楚相加操作时,进位的更新以及要注意,在最后相加完成后,仍有进位时,需要继续处理。
#include<iostream>
#include<string>
#include<vector>
using namespace std;
vector<int> add(vector<int> &a,vector<int> &b){
vector<int> C;//结果存放
int t = 0;//进位
int i = 0;
while(i<a.size() || i<b.size()){
if(i<a.size()) t += a[i];
if(i<b.size()) t += b[i];
C.push_back(t%10);
t = t/10;
i++;
}
//如果最后仍有进位,继续处理
if(t) C.push_back(1);
return C;
}
int main(){
//两个超大整数,超出了所给类型的范围,需要将数组存放在数组中
//首先需要接受两个超大数组,用字符串类型接收,接着进行按位存放
string a,b;
cin>>a>>b;
vector<int> A;
vector<int> B;
//为了计算方便,此时存放在数组时,按照由低位到高位进行存储
for(int i=a.size()-1;i>=0;i--) A.push_back(a[i] - 0);
for(int i=a.size()-1;i>=0;i--) B.push_back(b[i] - 0);
//两大整数存储完成后,此时就需要进行相加操作
vector<int> res = add(A,B);
//得到结果后,输出结果数组中的结果
for(int i=res.size()-1;i>=0;i--){
cout<<res[i];
}
return 0;
}
