算法题实现并返回,2个长整数的字符串相加的和,比如”1234567890” + “99” = “1234567989”,不能直接转成bigdeciaml 或 long相加
public class Main {public static void main(String[] args) {System.out.println(sumStr("507", "593"));}public static String sumStr(String m, String n) {char[] ms = m.toCharArray();char[] ns = n.toCharArray();if (ms.length > ns.length) {return String.valueOf(sum(ms, ns));} else {return String.valueOf(sum(ns, ms));}}/**** @param ms 长数组* @param ns 短数组* @return*/public static char[] sum (char[] ms , char[] ns) {boolean flag = false;for (int i = ms.length-1; i > -1; i--) {// 短数组下表int index = ns.length - (ms.length - i);// 下标边界if (index > -1) {int sum = Integer.valueOf(ms[i] + "") + Integer.valueOf(ns[index] + "");sum = flag ? sum + 1 : sum;int mod = sum % 10;flag = sum > 9;ms[i] = ((flag ? mod : sum) + "").toCharArray()[0];} else if (!flag){break;} else {int sum = Integer.valueOf(ms[i] + "") + 1;int mod = sum % 10;flag = sum > 9;ms[i] = ((flag ? mod : sum) + "").toCharArray()[0];}}// 结果位数是否超过最长数组if (flag) {char[] msplus = new char[ms.length+1];msplus[0] = '1';for (int i = 0; i < ms.length; i++) {msplus[i+1] = ms[i];}return msplus;} else {return ms;}}}
