zoukankan      html  css  js  c++  java
  • 算法之大数相加Java版

    一道面试题,就是用字符串表示两个数,求这两个数的加法。(不能使用内置类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();
        }
    Looking for a job working at Home about MSBI
  • 相关阅读:
    bzoj1660[Usaco2006 Nov]Bad Hair Day 乱发节*
    bzoj1624[Usaco2008 Open] Clear And Present Danger 寻宝之路*
    bzoj1617[Usaco2008 Mar]River Crossing渡河问题*
    bzoj1681[Usaco2005 Mar]Checking an Alibi 不在场的证明*
    bzoj1631[Usaco2007 Feb]Cow Party*
    bzoj1854[Scoi2010]游戏
    bzoj2338[HNOI2011]数矩形
    bzoj1096[ZJOI2007]仓库建设
    继承原理、派生重用
    面向对象三大特性——继承(含派生)
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/14965962.html
Copyright © 2011-2022 走看看