算法题实现并返回,2个长整数的字符串相加的和,比如”1234567890” + “99” = “1234567989”,不能直接转成bigdeciaml 或 long相加

    1. public class Main {
    2. public static void main(String[] args) {
    3. System.out.println(sumStr("507", "593"));
    4. }
    5. public static String sumStr(String m, String n) {
    6. char[] ms = m.toCharArray();
    7. char[] ns = n.toCharArray();
    8. if (ms.length > ns.length) {
    9. return String.valueOf(sum(ms, ns));
    10. } else {
    11. return String.valueOf(sum(ns, ms));
    12. }
    13. }
    14. /**
    15. *
    16. * @param ms 长数组
    17. * @param ns 短数组
    18. * @return
    19. */
    20. public static char[] sum (char[] ms , char[] ns) {
    21. boolean flag = false;
    22. for (int i = ms.length-1; i > -1; i--) {
    23. // 短数组下表
    24. int index = ns.length - (ms.length - i);
    25. // 下标边界
    26. if (index > -1) {
    27. int sum = Integer.valueOf(ms[i] + "") + Integer.valueOf(ns[index] + "");
    28. sum = flag ? sum + 1 : sum;
    29. int mod = sum % 10;
    30. flag = sum > 9;
    31. ms[i] = ((flag ? mod : sum) + "").toCharArray()[0];
    32. } else if (!flag){
    33. break;
    34. } else {
    35. int sum = Integer.valueOf(ms[i] + "") + 1;
    36. int mod = sum % 10;
    37. flag = sum > 9;
    38. ms[i] = ((flag ? mod : sum) + "").toCharArray()[0];
    39. }
    40. }
    41. // 结果位数是否超过最长数组
    42. if (flag) {
    43. char[] msplus = new char[ms.length+1];
    44. msplus[0] = '1';
    45. for (int i = 0; i < ms.length; i++) {
    46. msplus[i+1] = ms[i];
    47. }
    48. return msplus;
    49. } else {
    50. return ms;
    51. }
    52. }
    53. }