算法思想:
1.将大整数储存到数组中(倒序储存,因为这样方便进位)
2.当同位的数相加大于10后进位
3.加法完成后倒序输出
补充知识:
1.vector相关用法:(可以参考这位博主的文章)
C++11 auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型
3.&(引用):
使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,相当于复制了一遍。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效 率和所占空间都好。
代码如下:
#include <iostream>
#include <vector>
//
//无多余前导0时
using namespace std;
//C = A + B
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;
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--){
cout<<C[i];
}
return 0;
}
是否发现上面的代码没有解决前导0的问题,如 02+02=4,上方代码结果为04
解决方法如下:
将代码段
for(int i = C.size()-1;i>=0;i--){
cout<<C[i];
}
替换为代码段
int flag = 0;
for(int i = C.size()-1;i>=0;i--){
if(C[i]!=0){
flag = 1;
}
if(flag){
cout<<C[i];
}
}
if(!flag){//注意0+0=0的处理
cout<<0;
}