• 用字符串模拟两个大数相加——java实现


    问题:

      大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求。可以使用字符串来表示大数,模拟大数相加的过程。

    思路:

        1.反转两个字符串,便于从低位到高位相加和最高位的进位导致和的位数增加;

                2.对齐两个字符串,即短字符串的高位用‘0’补齐,便于后面的相加;

                3.把两个正整数相加,一位一位的加并加上进位。

    具体代码如下:

     /**
         * 用字符串模拟两个大数相加
         * @param n1 加数1
         * @param n2 加数2
         * @return   相加结果
         */
        public static String add2(String n1,String n2)
        {
        StringBuffer result = new StringBuffer();
    
        //1、反转字符串
        n1 = new StringBuffer(n1).reverse().toString();    
        n2 = new StringBuffer(n2).reverse().toString();
        
        int len1 = n1.length();
        int len2 = n1.length();
        int maxLen = len1 > len2 ? len1 : len2;
        boolean nOverFlow = false; //是否越界
        int nTakeOver = 0 ; //溢出数量
        
        //2.把两个字符串补齐,即短字符串的高位用0补齐
        if(len1 < len2)
        {
            for(int i = len1 ; i < len2 ; i++)
            {
            n1 += "0";
            }
        }
        else if (len1 > len2)
        {
            for(int i = len2 ; i < len1 ; i++)
            {
            n2 += "0";
            }
        }
        
        //3.把两个正整数相加,一位一位的加并加上进位
        for(int i = 0 ; i < maxLen ; i++)
        {
            int nSum = Integer.parseInt(n1.charAt(i) +"") + Integer.parseInt(n2.charAt(i) +"");
            
            if(nSum >= 10)
            {
            if(i == (maxLen - 1))
            {
                nOverFlow  = true;
            }
            nTakeOver = 1;
            result.append(nSum - 10);
            }
            else
            {
            nTakeOver = 0;
            result.append(nSum);
            }
        }
        
        //如果溢出的话表示位增加了
        if(nOverFlow)
        {
            result.append(nTakeOver);
        }
        return result.reverse().toString();
        }

    测试:

     public static void main(String[] args) 
        {
        String str = add2("911","222");
        System.out.println(str);
        }

    结果:

    1133

      致谢:感谢您的阅读!

  • 相关阅读:
    Codeforces 1316B String Modification
    Codeforces 1305C Kuroni and Impossible Calculation
    Codeforces 1305B Kuroni and Simple Strings
    Codeforces 1321D Navigation System
    Codeforces 1321C Remove Adjacent
    Codeforces 1321B Journey Planning
    Operating systems Chapter 6
    Operating systems Chapter 5
    Abandoned country HDU
    Computer HDU
  • 原文地址:https://www.cnblogs.com/0201zcr/p/4906283.html
Copyright © 2020-2023  润新知