大数相加,也就是两个字符串相加,最后返回的还是字符串。我们知道整数相加是从个位开始加起的,字符串相加也要从个位加起,我们需要使用过 3
个变量:
一个是 i
指向第一个数字,一个是 j
指向第二个数字,还一个是 carry
表示进位的值。
刚开始的时候 i
和 j
分别指向字符串的最后一个字符,也就是个位,两个数相加最多只能进一位,所以 carry
要么是 0
要么是 1
。
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;
}