LeetCode 415. 字符串相加(字符串、高精度)——每日一题

上一篇博客:LeetCode 3.无重复字符的最长子串(滑动窗口、双指针)

 写在前面:大家好!我是ACfun,我的昵称来自两个单词Acceptedfun。我是一个热爱ACM的蒟蒻。最近萌生了刷LeetCode的想法,所以我打算从LeetCode简单的题目开始做起,攻陷LeetCode。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油,冲鸭!
用知识改变命运,用知识成就未来!加油 (ง •̀o•́)ง (ง •̀o•́)ง

原题链接:字符串相加

文章目录

  • 题目信息
    • 题目描述
    • 注意
  • 题解
    • 解题思路
    • 解题代码
    • 提交结果

题目信息

题目描述

 给定两个字符串形式的非负整数 num1num2 ,计算它们的和。

注意

 1.num1 和num2 的长度都小于 5100.
 2.num1 和num2 都只包含数字 0-9.
 3.num1 和num2 都不包含任何前导零。
 4.你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。

题解

解题思路

 这个题目其实就是高精度加法,其中还有字符串的操作。有关高精度加法的详解可以看 计蒜客T1098:大整数加法(高精度加法详解) 这一篇博客。

 首先函数的返回值为 string 类型的,所以我们定义一个空的字符串 ans 来存储两个字符串相加的结果。在相加的过程中我们先将每一个数位先转化为数字,如果不明白是如何转换的可以看一个上面提到的有关高精度加法详解的博客,这里就不再赘述了。

 我们定义一个用于进位的整型变量 t 并初始化为 0 。每次相加的时候我们首先要判断一下两个字符串是否越界了,如果没有越界那么就将该数位加上进位 t 中的数字,然后再将加完之后的结果对 10 取模 再加上 '0' 将其转换为字符的形式追加到 ans 中。最后将 ans 翻转一下返回即可(因为我们是从低位开始相加存储的,相加完之后 ans 中的结果实际上是从低位到高位存储的,所以返回的时候应该翻转一下使数位从高到低进行存储)。

解题代码

class Solution {
public:
    string addStrings(string num1, string num2) {
        int len1 = num1.length() - 1, len2 = num2.length() - 1;
        int t = 0;
        string ans = "";
        while (len1 >= 0 || len2 >= 0 || t) {
            if (len1 >= 0) t += num1[len1] - '0';
            if (len2 >= 0) t += num2[len2] - '0';
            ans += '0' + t % 10;
            t /= 10;
            len1--;
            len2--;
        }
        reverse(ans.begin(), ans.end());
        return ans;
    }
};

提交结果

LeetCode 415. 字符串相加(字符串、高精度)——每日一题_第1张图片


未完待续,持续更新中……
LeetCode 415. 字符串相加(字符串、高精度)——每日一题_第2张图片

你可能感兴趣的:(LeetCode,LeetCode,字符串,高精度,C++,每日一题)