字符串相加leetcode415—C++

415. 字符串相加 - 力扣(LeetCode)

‘123’+‘23’ = ?

我相信大家都会算的出来,那我们如何用代码去分析呢?

我们要从后面加:‘123’个位是3

Step 1:要将字符转换成数字(数字字符 - ‘0’=所对应的数字,2asscll对应的为50,0对应为48;example:‘2’-‘0’ = 2)

Step2 :  要对进制进行处理(要创建一个变量去存储)

Step3:  要将最后的相加的结果转换

下面代码我已经标好解释

class Solution {
public:
    string addStrings(string num1, string num2) 
    {
        int end1 =num1.size()-1;//控制计算的次数
        int end2 =num2.size()-1;
        int next =0;//进制
        int val1,val2,sum;//val1和val2是用来分别存放两个string转换数字的,sum是用来位的进制相加的(val1+val2+上一位留下的进制)
        string s ="";
        while(end1>=0||end2>=0)//因为数组有长有短所以要限制如果有一个string还存在就还没结束
        {
            if(end1>=0)
            {
                val1 = num1[end1]-'0';//转换
                end1--;
            }
            else
            {
                val1=0;//当val1运行完了应该将val1变成0,防止参与到下面的运算
            }
            if(end2>=0)
            {
                val2=num2[end2]-'0';//转换
                end2--;
            }
             else
            {
                val2=0;//同理
            }
            sum=val1+val2+next;//相加
            if(sum>9)
            {
                next =sum/10;//保持进制
                sum -=10;//去除进制
            }
            else
            {
                next=0;
            }
            s +=(sum+'0');//这里+=是尾增,所以是反的,也可以用insert(s.begin(),sum+'0')头插就不会了
        }
        if(next==1)
        {
            s +='1';
        }
        reverse(s.begin(),s.end());//反转
        return s;
    }
};

成字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值