首页 > 编程语言 > 详细

算法之大数相加Java版

时间:2021-07-03 15:32:05      阅读:11      评论:0      收藏:0      [点我收藏+]

一道面试题,就是用字符串表示两个数,求这两个数的加法。(不能使用内置类BigInteger)

我一开始想到的就是把字符串转成字符数组,然后使用mergesort的思路来处理。

一开始使用的是Integer.parsetInt(String.valueOf(char))有些麻烦,后来改成了‘9‘-‘0‘这种方式

来把char转成整数。

如下:

  static String bigNumberAdd2(String add1, String add2) {
        char[] v1 = add1.toCharArray();
        char[] v2 = add2.toCharArray();
        StringBuilder sb = new StringBuilder();

        int N1 = v1.length - 1;
        int N2 = v2.length - 1;
        int sum = 0;
        int carry = 0;

        while (N1 > -1 && N2 > -1) {
            sum = ( v1[N1] - ‘0‘ ) + (  v2[N2] - ‘0‘) + carry;
            carry = sum / 10;
            sum = sum % 10;
            sb.append(sum);
            N1--;
            N2--;
        }
        while(N1>-1) {
            sum = ( v1[N1] - ‘0‘ )  + carry;
            carry = sum / 10;
            sum = sum % 10;
            sb.append(sum);
            N1--;
        }
        while(N2>-1) {
            sum =  ( v2[N2] - ‘0‘) + carry;
            carry = sum / 10;
            sum = sum % 10;
            sb.append(sum);
            N2--;
        }

        return sb.reverse().toString();
    }

 你会发现后面的while循环内容是一样的,所以经过思考优化,有了下面的版本:

static String bigNumberAdd(String add1, String add2) {
        char[] v1 = add1.toCharArray();
        char[] v2 = add2.toCharArray();
        StringBuilder sb = new StringBuilder();

        int N1 = v1.length - 1;
        int N2 = v2.length - 1;
        int sum = 0;
        int carry = 0;

        while (N1 > -1 || N2 > -1) {
            sum = (N1 > -1 ? v1[N1] - ‘0‘ : 0) + (N2 > -1 ? v2[N2] - ‘0‘ : 0) + carry;
            carry = sum / 10;
            sum = sum % 10;
            sb.append(sum);
            N1--;
            N2--;
        }
        return sb.reverse().toString();
    }

 

算法之大数相加Java版

原文:https://www.cnblogs.com/huaxiaoyao/p/14965962.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!