用字符串模擬兩個大數相加——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

 

 

  致謝:感謝您的閱讀!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM