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
  • 相关阅读:
    Leetcode 238. Product of Array Except Self
    Leetcode 103. Binary Tree Zigzag Level Order Traversal
    Leetcode 290. Word Pattern
    Leetcode 205. Isomorphic Strings
    Leetcode 107. Binary Tree Level Order Traversal II
    Leetcode 102. Binary Tree Level Order Traversal
    三目运算符
    简单判断案例— 分支结构的应用
    用switch判断月份的练习
    java基本打印练习《我行我素购物系统》
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/14965962.html
Copyright © 2011-2022 走看看