【算法题】大数加法

大数加法

https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475?tpId=196&tqId=37176&rp=1&sourceUrl=%2Fexam%2Foj&difficulty=undefined&judgeStatus=undefined&tags=&title=

大数相加,也就是两个字符串相加,最后返回的还是字符串。我们知道整数相加是从个位开始加起的,字符串相加也要从个位加起,我们需要使用过 3 个变量:

一个是 i 指向第一个数字,一个是 j 指向第二个数字,还一个是 carry 表示进位的值。

刚开始的时候 ij 分别指向字符串的最后一个字符,也就是个位,两个数相加最多只能进一位,所以 carry 要么是 0 要么是 1

alt

Java代码:

    public String solve(String s, String t) {
        StringBuilder ans = new StringBuilder();
        int i = s.length() - 1, j = t.length() - 1, carry = 0;
        while (i >= 0 || j >= 0 || carry != 0) {
            // x 表示 i 指向的字符,如果指向空,则返回 0 。
            int x = i < 0 ? 0 : s.charAt(i--) - '0';
            int y = j < 0 ? 0 : t.charAt(j--) - '0';
            int sum = x + y + carry;// 两个数字相加在加上进位的值
            ans.append(sum % 10);// 取相加的个位数字
            carry = sum / 10;// 进位的值
        }
        return ans.reverse().toString();// 对字符串反转
    }

C++代码:

public:
    /**
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    string solve(string s, string t) {
        string ans;
        int i = s.length() - 1, j = t.length() - 1, carry = 0;
        while (i >= 0 || j >= 0 || carry != 0) {
            // x 表示 i 指向的字符,如果指向空,则返回 0 。
            int x = i < 0 ? 0 : s[i--] - '0';
            int y = j < 0 ? 0 : t[j--] - '0';
            int sum = x + y + carry;// 两个数字相加在加上进位的值
            ans += to_string(sum % 10);// 取相加的个位数字
            carry = sum / 10;// 进位的值
        }
        reverse(ans.begin(), ans.end());// 对字符串反转
        return ans;
    }

各大厂算法面试题已经整理好了,请看这里:《算法专栏》

为了应对春招和秋招找工作,我经过长时间的收集和整理了各大厂的算法面试题,所有的算法题我都已经做了实现,大家可以根据自己需要面试的大厂选择练习即可。适宜人群: 在校生、社招求职者及自学者。

全部评论

相关推荐

07-15 16:52
已编辑
门头沟学院 Java
周五投的,流程今天结束
投递地平线等公司7个岗位
点赞 评论 收藏
分享
Rena1ssanc...:对的,要是面评没太烂,勤更新简历等捞就行了,腾讯可以无限复活
点赞 评论 收藏
分享
07-15 11:43
门头沟学院 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务