zoukankan      html  css  js  c++  java
  • 算法问题大数相加

    大数相加

    比如远超long的数字相加,求其结果,需要用到数组,通过进位去实现

    package algorithm.bignumbersum;
    
    public class BigNumberSum {
        /**
         * 字符数组翻转
         * 12345 3   04  13 22
         * 1234 2   03  12
         *
         * 同时进行末尾补零,方便下面的运算
         */
        public static int[] reverse(String str, int maxLen){
            char[] chars = str.toCharArray();
            int[] array = new int[maxLen];
            for (int i = chars.length-1  ; i >=0; i--) {
                array[chars.length-i-1] = chars[i]-'0';
            }
    
            return array;
        }
    
        //去掉翻转后高位的零
        public static String reverse(int[] ints){
            StringBuffer sb = new StringBuffer();
            for (int i = ints.length-1; i >=0; i--) {
                if(ints[i]!=0){
                    sb.append(ints[i]);
                }else{
                    continue;
                }
            }
            return sb.toString();
        }
    
    
        /**
         * 大整数相加
         * 思路拆分成数组 然后进位
         */
        public static String bigNumberSum(String num1,String num2){
            /**
             * 先把数组翻转
             * 12345+123 可以转换成 54321+321 从左向右做加法
             *
             */
            int maxLen = num1.length()>num2.length()?num1.length():num2.length();
            int[] n1 = reverse(num1,maxLen);
            int[] n2 = reverse(num2,maxLen);
            int[] res = new int[maxLen+1];
    
            for (int i = 0; i < maxLen; i++) {
                int temp = n1[i] + n2[i];
                //考虑 十进制 进位问题
                if(temp>=10) {
                    res[i + 1] = 1;
                    temp -=10;
                }
                res[i]=temp;
            }
            return reverse(res);
        }
    
        public static void main(String[] args) {
            //12345+123 = 12468
            System.out.println(bigNumberSum("12345","123"));
        }
    }
    
    
    不会,我可以学;落后,我可以追赶;跌倒,我可以站起来!
  • 相关阅读:
    Flink之DataStreamAPI入门
    Spark底层原理简化版
    Spark调优
    Flink架构及其工作原理
    Kafka总结
    leetcode数学相关
    程序员的修炼之道5
    数据库连库建表
    完成了web系统
    即将完成大型web系统
  • 原文地址:https://www.cnblogs.com/xiaoshahai/p/15623042.html
Copyright © 2011-2022 走看看