目录
牛客_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();
}
}