(C++)字符串相加

愿所有美好如期而遇


题目链接:415. 字符串相加 - 力扣(LeetCode)

思路

我们看到字符串长度可能到达一万,而且不允许使用处理大整数的库,也就是说,转成整数相加后再转成字符串是不可行的。

那么我们就让字符串尾部的字符各自减去48后单位相加,再加进位,然后得到一个大小,求余后+48尾插到一个我们定义的字符串中,进位除以10,然后不为空的字符串删除尾部的单个字符,这就是单趟。

我们用循环来走,直到两个字符串都为空。

图解

代码

复制代码
class Solution {
public:
    string addStrings(string num1, string num2) 
    {
        string result;
        int next = 0;

        char tmp1 = 0;
        char tmp2 = 0;

        while(!num1.empty() || !num2.empty())
        {
            if(!num1.empty())
                tmp1 = num1[num1.size()-1] - 48;
            else
                tmp1 = 0;

            if(!num2.empty())
                tmp2 = num2[num2.size()-1] - 48;
            else
                tmp2 = 0;

            int sum = tmp1 + tmp2 + next;
            next = sum / 10;
            sum %= 10;

            result += (sum+48);

            if(!num1.empty())
                num1.erase(num1.end()-1);
            if(!num2.empty())
                num2.erase(num2.end()-1);
        }

        if(next > 0)
            result += '1';

        reverse(result.begin(),result.end());
        return result;
    }   
};
相关推荐
郭涤生4 小时前
布隆过滤器
c++
智者知已应修善业4 小时前
【求中位数】2024-1-23
c语言·c++·经验分享·笔记·算法
9ilk4 小时前
【C++】--- 特殊类设计
开发语言·c++·后端
程序员zgh8 小时前
Linux系统常用命令集合
linux·运维·服务器·c语言·开发语言·c++
獭.獭.8 小时前
C++ -- STL【unordered_set与unordered_map的实现】
开发语言·c++·unordered_map·unordered_set
qq_433554549 小时前
C++数位DP
c++·算法·图论
似水এ᭄往昔9 小时前
【C++】--AVL树的认识和实现
开发语言·数据结构·c++·算法·stl
程序员zgh9 小时前
常用通信协议介绍(CAN、RS232、RS485、IIC、SPI、TCP/IP)
c语言·网络·c++
暗然而日章9 小时前
C++基础:Stanford CS106L学习笔记 8 继承
c++·笔记·学习
有点。10 小时前
C++ ⼀级 2023 年06 ⽉
开发语言·c++