每日OJ题_牛客_NC1大数加法_高精度加法_C++_Java

目录

牛客_NC1大数加法_高精度加法

题目解析

C++代码

Java代码


牛客_NC1大数加法_高精度加法

大数加法_牛客题霸_牛客网


题目解析

模版类型的算法题,模拟加法列竖式运算的过程即可。

假定算法流程: 

  • 设定 i,j 两指针分别指向 s,t 尾部,模拟人工加法;
  • 计算进位: 计算 carry = tmp // 10,代表当前位相加是否产生进位;
  • 添加当前位: 计算 tmp = n1 + n2 + carry,并将当前位 tmp % 10 添加至 res 头部;
  • 索引溢出处理: 当指针 i或j 走过数字首部后,给 n1,n2 赋值为 0,相当于给 s,t 中长度较短的数字前面填 0,以便后续计算。
  • 当遍历完 s,t 后跳出循环,并根据 carry 值决定是否在头部添加进位 1,最终返回 res 即可。

C++代码

class Solution {
    public:
    /**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
    string solve(string s, string t) {
        int end1 = s.size() - 1, end2 = t.size() - 1;
        string ret;
        int carry = 0;
        while(end1 >= 0 || end2 >= 0)
        {
            int val1 = end1 >= 0 ? s[end1] - '0' : 0;
            int val2 = end2 >= 0 ? t[end2] - '0' : 0;
            ret += (val1 + val2 + carry) % 10 + '0';
            if(val1 + val2 + carry > 9)
            {
                carry = 1;
            }
            else
            {
                carry = 0;
            }
            --end1;
            --end2;
        }
        if(carry)
        {
            ret += '1';
        }
        reverse(ret.begin(), ret.end());
        return ret;
    }
};

Java代码

import java.util.*;
public class Solution
{
    public String solve (String s, String t)
    {
        StringBuffer ret = new StringBuffer();
        int tmp = 0;
        int i = s.length() - 1, j = t.length() - 1;
        while(i >= 0 || j >= 0 || tmp > 0)
        {
            if(i >= 0)
            {
                tmp += s.charAt(i--) - '0';
            }
            if(j >= 0)
            {
                tmp += t.charAt(j--) - '0';
            }
            ret.append((char)('0' + tmp % 10));
            tmp /= 10;
        }
        return ret.reverse().toString();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GR鲸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值