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