字符串经典题之大数相加

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串经典题之大数相加相关的知识,希望对你有一定的参考价值。

题目

字符串相加
在这里插入图片描述

解答

相加时按照对应为相加即可,注意有的时候相加可能会导致进位,所以我们可以定义一个变量next,next取值为0表示不进位,next取值为1表示进位。拿出对应位的字符的时候,将他们加起来(也包括next),然后判断相加的结果是否大于10,如果大于10把next设置为1,否则设置为0,。每算完一个结果,就把结果push进一个string里。最后将结果反转。

需要注意的时候,加完之后要判断一下这个进位是否归为0,因为有时会出现9999+1=10000这种情况,如果不判断话,结果就编程了0000了

具体的细节实现,见代码注释

代码

class Solution {
public:
    string addStrings(string num1, string num2) 
    {
        string ret;//返回结果字符串
        int end1=num1.size()-1;
        int end2=num2.size()-1;//end1和end2分别用来从后向前扫描num1和num2字符串
        int next=0;//标记进位
        while(end1>=0 || end2>=0)//扫描
        {
            int ret1=0,ret2=0;//用来接受对应单个位置的字符
            if(end1>=0)
            {
                ret1=num1[end1--]-'0';//转换为数字
                
            }
            if(end2>=0)
            {
                ret2=num2[end2--]-'0';//转换为数字
            }
            int retch=ret1+ret2+next;//单位相加注意加进位
            if(retch>=10)//如果大于10表示,下一位要进位
            {
                retch-=10;//留下个位数字
                next=1;
            }
            else
            {
                next=0;//如果不大于10,就不仅为
            }
            ret+=(retch+'0');//转化为字符,并尾插到返回字符数组中
        }
        if(next==1)//有一种特殊情况就是9999+1,所以特殊处理
        {
            ret+='1';
        }

        reverse(ret.begin(),ret.end());//由于是尾插所以注意反转
        return ret;

    }
};

以上是关于字符串经典题之大数相加的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#JS两个大数相加

大数相加

动态规划经典题之编辑距离

Java实现字符串形式大数相加

字符串模拟大数相加——Java实现

算法:如何实现两个大数相加