题解 | #大数加法#
大数加法
http://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475
常规解题思路
一开始用String存结果,然后超出长度报错了,改成了可变长度类型StringBuilder就可以了,但是StringBuiler是线程不安全的,所以在多线程时StringBuffer更合适。
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
public String solve (String s, String t) {
// write code here
if(s.length()>100000||t.length()>100000)return null;//超出长度返回null
if(s.isEmpty()||t.isEmpty())
return s.isEmpty()?t:s;//如果有一个为空,则返回另一个数
if(s.length()>t.length()){//把s作为短数,t作为长数
String temp=s;
s=t;
t=s;
}
int m,n,sum,c=0;//m,n用于取数,sum按位求和,c为进位
StringBuilder str=new StringBuilder();//Stringbuilder类型为可变长,并且单线程,所以比较合适
int i=s.length()-1,j=t.length()-1;//i为s的游标,j为t的游标
for(;i>=0||j>=0||c>0;i--,j--){//判断是否算完
m=n=0;
if(i>=0)m=Character.getNumericValue(s.charAt(i));
if(j>=0)n=Character.getNumericValue(t.charAt(j));
sum=m+n+c;
c=sum/10;
sum=sum%10;
str.insert(0,sum);
}
return str.toString();
}
}