LeetCode415. 字符串相加 (简单) string用法补充+简单思路分析

思路分析

这题考察的是竖式相加,可以用string来处理两个数,此题可以作为大数处理的基础

c++中,大数处理的基本思路是通过字符串相加减,实现高位大数的处理。

前置知识补充

需要知道string 的用法,

  1. string asd;//需要头文件iostream
  2. int num1,num2,add;
  3. asd.length();//获得当前字符串长度。获取字符串长度的3种办法
  4. asd.push_back(num1%10+‘0’);//插入单个字符串,string中,插入时,会将当然的字符往后移。比如asd中原本存储‘12’,插入3后,asd就变为了312。
  5. reverse(asd.begin(),asd.end());//逆序字符串,asd.begin()和asd.end()是获取字符串头尾地址。
  6. 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;
    }
};

看代码似乎能更好的理解 ,毕竟此题是很简单的题。只是没想到我大一上似乎就能这样写了,但是四年后我的水平好像没有多少进步。加油吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值