注意题目给的数据范围是整数长度也就是位数。
复习:
1.c++的vector用法
2.string字符串数组用法。
3.auto关键字用法。使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。因此auto并非是一种"类型"的声明,而是一个类型声明时的"占位符”,编译器在编译期会将auto替换为变量实际的类型。
主函数部分:因为给定整数较大,设置成string字符串数组类型,再逐个放入vector<int>容器,放入时注意将字符数组的数转换成为整数类型,即a[i]-'0'。
个位数存在数组下标为0的位置,往后以此类推,这样方便进位(若进位直接在数组尾端添加)。
模板函数部分:创建新容器C用来存放答案。t表示目前位的数的大小,模10表示把个位直接填到新数组,t自身除以10保留是否有进位。循环条件是A容器还有数或者B还有数,循环内再具体判断还有哪个剩余数。循环结束后判断是否有进位,若有则填到C容器末端。
#include<iostream>
#include<vector>
using namespace std;
vector<int> add(vector<int>&A,vector<int>&B){
vector<int> C;
int i,t=0;
for(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;
int i;
vector<int>A,B;
cin>>a>>b;
for(i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
for(i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
auto C=add(A,B);
for(i=C.size()-1;i>=0;i--) cout<<C[i];
return 0;
}