题解 | #大数加法#
大数加法
https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475
import java.util.*;
public class Solution {
/**
* 总体思路,先相加,再统一进位,再输出结果;原生char运算;
* String和Stringbuffer按下标获取、删除,减少外余代码量;
* 逻辑简单,字符串不用反转,时间较短
*/
public String solve (String s, String t) {
// write code here
return caculate(s,t);
}
public String caculate(String sn,String tn){
int length = 1;
if(sn.length()<tn.length()){
length = tn.length()+1;//最大长度加1,为最高位相加进位准备
}else{
length = sn.length()+1;
}
char [] result = new char[length];
int k = length-1;
int i = sn.length()-1;
int j = tn.length()-1;
//先相加
while(k>=0){
int s = 0;
//向前遍历,如果字符没加过,就取字符对应数值参与相加,否则取0
if(i>=0){
s = sn.charAt(i--) - '0';
}
int t = 0;
if(j>=0){
t = tn.charAt(j--) - '0';
}
int sum = s + t;
result[k--] = (char)(sum + '0');//加'0'后才能转换为char,否则值为空
}
//在上面相加后再统一进位
int index = length-1;
while(index>0) {
if(result[index]>=10){
result[index-1] =(char)(result[index-1]-'0' + (result[index]-'0')/10 +'0');//index-1元素自身加上index元素进位的数
result[index] = (char)((result[index]-'0')%10 + '0');//index元素自身取余为自身
}
index --;
}
//输出结果
StringBuffer resultNew = new StringBuffer(String.valueOf(result));//先转String再转StringBuffer
if(result[0]!='0') {//刚初始化时为'0',相加时有进位到0坐标元素这个点(最高位进位)
return resultNew.toString();//char数组直接toString会为空,所以用StringBuffer
} else{
resultNew.deleteCharAt(0);//删除未被进位的0坐标元素
return resultNew.toString();
}
}
}
