题解 | #大数加法# StringBuilder + 数学
大数加法
https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 计算两个数之和 * @param s string字符串 表示第一个整数 * @param t string字符串 表示第二个整数 * @return string字符串 */ public String solve (String str1, String str2) { // write code here int aLen = str1.length(); int bLen = str2.length(); int maxLen = aLen > bLen ? aLen : bLen; int sum[] = new int[maxLen + 1]; int a[] = new int[maxLen+1]; Arrays.fill(a,0); for(int i=0;i<aLen;i++){ a[i] = str1.charAt(aLen - i - 1) - '0'; } int b[] = new int[maxLen + 1]; Arrays.fill(b,0); for(int i=0;i<bLen;i++){ b[i] = str2.charAt(bLen - i - 1) - '0'; } // 计算加权数 int modNum = 0; for(int i = 0;i<maxLen;i++){ int t = a[i] + b[i] + modNum; if(t >= 10){ sum[i] = t - 10; modNum = 1; }else{ sum[i] = t; modNum = 0; } } int endIdx = maxLen; if(modNum!=0){ endIdx += 1; sum[maxLen] = 1; } StringBuilder builder = new StringBuilder(); for(int i=0;i<endIdx;i++){ if(i == maxLen && sum[i] != 0){ builder.append("1"); }else{ builder.append(String.valueOf(sum[i])); } } return builder.reverse().toString(); } }
从后往前计算累加,转化为数字计算,最后转化为字符串