题解 | #大数加法#
大数加法
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) { //思路1:直接把字符串转成对应的浮点数类型 //会直接溢出不可行 //思路2:取部分分段然后相加 //时间超了 /*最后是把普通字符串ans改成了运行效率更好的StringBuilder类, 原因是String在进行加法是不断开辟对象,然后把对象删除的过程 String a(原); a(左)=a(原的地址)+1; a(原)先开一个空间,然后a(左)开一个空间并获得a(原)的值+1, 然后把a(原)的地址直接回收了,只保留a(左)的地址作为变量a的地址, 所以时间比较久。至于StringBuilder,则不用开一个新的空间, 也不用回收空间,只是在改变自己,在原本的地址修改参数,自然效率要高很多。 */ int s1=s.length(); int t1=t.length(); int docker=0; StringBuilder res = new StringBuilder(); String ans=""; //取最大长度 int len=s1>t1?s1:t1; for(int i=s1-1,j=t1-1;len>0||docker!=0;i--,j--,len--) { int temps=0; int tempt=0; if(i>=0) { String a1=String.valueOf(s.charAt(i)); temps=Integer.parseInt(a1); } if(j>=0) { String a2=String.valueOf(t.charAt(j)); tempt=Integer.parseInt(a2); } int tempans=temps+tempt+docker; docker=tempans>=10?1:0; int charans = tempans%10; res.insert(0,charans); } return (res.toString()); // write code here } }