(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;
    }   
};
相关推荐
INS_KF22 分钟前
【C++知识杂记2】free和delete区别
c++·笔记·学习
一只鱼^_30 分钟前
牛客周赛 Round 105
数据结构·c++·算法·均值算法·逻辑回归·动态规划·启发式算法
ikkkkkkkl32 分钟前
C++设计模式:面向对象设计原则
c++·设计模式·面向对象
啊阿狸不会拉杆1 小时前
《算法导论》第 27 章 - 多线程算法
java·jvm·c++·算法·图论
重启的码农1 小时前
ggml介绍 (8) 图分配器 (ggml_gallocr)
c++·人工智能·神经网络
重启的码农1 小时前
ggml介绍 (9) 后端调度器 (ggml_backend_sched)
c++·人工智能·神经网络
汉汉汉汉汉3 小时前
C++11新特性详解:从列表初始化到线程库
c++
楼田莉子4 小时前
C++算法题目分享:二叉搜索树相关的习题
数据结构·c++·学习·算法·leetcode·面试
大锦终4 小时前
【算法】模拟专题
c++·算法
方传旺5 小时前
C++17 std::optional 深拷贝 vs 引用:unordered_map 查询大对象性能对比
c++