力扣989 2536 :两种数据类型相加的模板
模板如下
#include<bits/stdc++.h>
using namespace std;
class Solution{
public:
vector<int> addTwoNum(vector<int>& num1, vector<int>& num2) {
vector<int> res; // 结果容器
int carry = 0; // 进位的标志位
int l1 = num1.size() - 1; // 计算容器中元素的个数 因为相加是从元素零开始的
int l2 = num2.size() - 1;
// cout<<"l1: "<<l1<<" l2: "<<l2<<endl;
while (l1 >= 0 || l2 >= 0) {
//两个容器可能长度不一 当其中一个先用完全部元素 在末尾加零
int x = l1 < 0 ? 0 : num1[l1];
int y = l2 < 0 ? 0 : num2[l2];
// 和等于相同标号下的元素 与 进位标志位 之和
int sum = x + y + carry;
// 如果是两个正整数之和 那就是对10取余数 末尾
// 如果是二进制 那就是对2取余数
// 如果是字符需要把字符转为十进制 - '0' 相当于是 化为int 减去48
res.push_back(sum % 10);
// 除以10 不会四舍五入 进位标志位更新
carry = sum / 10;
l1--;
l2--;
}
// 如果加到最后还需要进位 就把进位标志位1 加到容器中
if (carry) res.push_back(carry);
//因为push_back()是从容器的尾部添加一个数字 需要反转
reverse(res.begin(), res.end());
return res;
}
};
int main(){
vector<int> a,b;
a.push_back(1);
a.push_back(2);
a.push_back(0);
a.push_back(0);
b.push_back(3);
b.push_back(4);
Solution s1;
vector<int> c = s1.addTwoNum(a,b);
for(vector<int>::iterator it = c.begin();it != c.end();it++){
cout<<*it;
}
return 0;
}