题解 | #大数加法#
大数加法
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
}
}
