思路分析
这题考察的是竖式相加,可以用string来处理两个数,此题可以作为大数处理的基础
c++中,大数处理的基本思路是通过字符串相加减,实现高位大数的处理。
前置知识补充
需要知道string 的用法,
- string asd;//需要头文件iostream
- int num1,num2,add;
- asd.length();//获得当前字符串长度。获取字符串长度的3种办法
- asd.push_back(num1%10+‘0’);//插入单个字符串,string中,插入时,会将当然的字符往后移。比如asd中原本存储‘12’,插入3后,asd就变为了312。
- reverse(asd.begin(),asd.end());//逆序字符串,asd.begin()和asd.end()是获取字符串头尾地址。
- int a1=len1>=0?num1[len1]-‘0’:0;//a>b?c:d;如果a比b大,则返回c,否则返回d。
题目分析思路
此处主要是自我回顾,附上官方讲解作为参考。
竖式加减法,在于进位,比如123+319=442,设置一个add作为每次是否有进位的判断,初始add=0,每次对string进行相加处理。
class Solution {
public:
string addStrings(string num1, string num2) {
int len1=num1.length()-1,len2=num2.length()-1,add=0;
string ans="";
while(len1>=0||len2>=0||add!=0)//此处的add判断条件是不等于0
{
int a1=len1>=0?num1[len1]-'0':0;//初始态
int a2=len2>=0?num2[len2]-'0':0;//如果numi中取完后,则取0
int flag=a1+a2+add;//add位默认为0,若为1时,也能实现进位
add=flag/10;//若flag=12,则add有进位
ans.push_back(flag%10+'0');
len1--;
len2--;
}
reverse(ans.begin(),ans.end());
return ans;
}
};
看代码似乎能更好的理解 ,毕竟此题是很简单的题。只是没想到我大一上似乎就能这样写了,但是四年后我的水平好像没有多少进步。加油吧!