题解 | #大数加法#
大数加法
https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475
思路一
- 将从右到左的加法,变成从左到右的加法;
- 顺序遍历字符串。
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算两个数之和 * @param s string字符串 表示第一个整数 * @param t string字符串 表示第二个整数 * @return string字符串 */ public String solve (String s, String t) { // write code here if(s.length() == 0) return t; if(t.length() == 0) return s; StringBuilder res = new StringBuilder(); StringBuilder s1 = new StringBuilder(s); StringBuilder s2 = new StringBuilder(t); // 逆转原字符串 s1 = s1.reverse(); s2 = s2.reverse(); // 从左到右加法 res = addInStr(s1, s2); // 反转,从右到左加法 return res.reverse().toString(); } private StringBuilder addInStr(StringBuilder s1, StringBuilder s2){ int idx1 = 0, idx2 = 0; int len1 = s1.length(), len2 = s2.length(); int carry = 0; // 进位 StringBuilder res = new StringBuilder(); while(idx1 < len1 || idx2 < len2 || carry > 0){ int val = carry; // 先加进位 if(idx1 < len1){ // 字符串s1 // val += Integer.parseInt(s1.charAt(idx1++)); val += s1.charAt(idx1++) - '0'; } if(idx2 < len2){ // 字符串s2 // val += Integer.parseInt(s2.charAt(idx2++)); val += s2.charAt(idx2++) - '0'; } carry = val / 10; // 取整得进位 val = val % 10; // 求余得当前位置和 // System.out.println("val=" + val + ", carry=" + carry); res.append(val); } return res; } }
思路二
- 从右向左遍历字符串;
- 在结果字符串首部进行插入;
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算两个数之和 * @param s string字符串 表示第一个整数 * @param t string字符串 表示第二个整数 * @return string字符串 */ public String solve (String s, String t) { // write code here if(s.length() == 0) return t; if(t.length() == 0) return s; StringBuilder res = new StringBuilder(); int idx1 = s.length() - 1; int idx2 = t.length() - 1; int carry = 0; while(idx1 >= 0 || idx2 >= 0 || carry > 0){ int val = carry; if(idx1 >= 0){ val += s.charAt(idx1--) - '0'; } if(idx2 >= 0){ val += t.charAt(idx2--) - '0'; } // res.append(val % 10); // 在尾部插入 res.insert(0, val % 10); // 在首部插入 carry = val / 10; } // return res.reverse().toString(); return res.toString(); } }