两个超大整数的相加问题
大整数相加问题,最核心的问题就是怎样处理每位数的相加以及进位的处理问题。
另外一点就是,大整数如何存储能够使得,两数相加时,更加容易处理。
此代码中,给出的思想就是,首先用字符串类型接收两个大整数,具体存储每位数用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; }