题解 | #大数加法#

大数加法

https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475

#include <cstdlib>
#include <string>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    string solve(string s, string t) {
        // write code here
        string result = "";
        int i = s.length()-1;
        int j = t.length()-1;
        int carry = 0;

        while (i>=0 || j>=0) {
            int digit1 = (i >= 0) ? (s[i]) - '0' : (0);
            int digit2 = (j>=0) ? (t[j]) - '0' : (0);
            int sum = digit1 + digit2 + carry;
            carry = sum / 10;
            sum %= 10;
            result = std::to_string(sum) + result;
            i--;
            j--;
        }
        if (carry!=0) {
            result = std::to_string(carry) + result;
        }
        return result;
    }
};

因为大数的位数很长,最长可有1e6个数,因此单纯使用std:stoi(string s),由于int类型过长,将会导致转换错误, std::atol(char* s)也是同理。

所以采用将两个字符串从最低位置去除字符,并转换成对应的int类型数字求和,并记录进位carry,在次最低位进行求和,直至两个字符串都求和至最后一位。

其中有一个小技巧:’58‘这样一个字符串,赋值给int类型的变量中,应当使用'58' - '0', 与'0'这个字符做差,则可以得到该数字字符对应的int大小。

接着将sum后的数值,对10取余,作为当前位的数字,并使用std::to_string(int val)转化为字符,并与result字符串通过+符号拼接在一起。

当加到最后时,将进位作为最后一位的字符,与结果拼接在一起。

全部评论

相关推荐

不愿透露姓名的神秘牛友
今天 10:25
点赞 评论 收藏
分享
11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
美团 后端开发 总包n(15%是股票)
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务