如果系統要使用超大整數(超過long長度范圍),請你設計一個數據結構來存儲這種超大型數字以及設計一種算法來實現超大整數加法運算


package interview_10_10;

import org.junit.Test;

public class T1 {

    /**
     * 如果系統要使用超大整數(超過long長度范圍),請你設計一個數據結構來存儲這種超大型數字以及設計一種算法來實現超大整數加法運算)。
     */
    @Test
    public void test1() {
        String number1 = "4324328732789";
        String number2 = "2383244324324325898";
        String result = doAdd(number1, number2);
        System.out.println(result);

    }

    /**
     * @param num1
     * @param num2
     * @return  返回結果
     * 1.計算小的那個左邊需要補幾個0
     * 2.從右邊開始一個個的開始相加
     */
    public static String doAdd(String num1, String num2) {
        String str = "";
        int lena = num1.length();
        int lenb = num2.length();
        
        int maxlength = lena > lenb ? lena : lenb;
        int minlength = lena < lenb ? lena : lenb;

        String strtemp = "";
        for (int i = (maxlength - minlength); i > 0; i--) { // 計算左邊需要補幾個0
            strtemp += 0;
        }
        if (maxlength == lena) { // 左邊補零
            num2 = strtemp + num2;
        } else {
            num1 = strtemp + num1;
        }
        int jw = 0;
        for (int i = (maxlength - 1); i >= 0; i--) {
            int temp = 0;
            int number1 = Integer.valueOf(String.valueOf(num1.charAt(i)));
            int number2 = Integer.valueOf(String.valueOf(num2.charAt(i)));

            if (number1 + number2 + jw > 10 && i != 0) {
                temp = number1 + number2 + jw - 10;
            } else {
                temp = number1 + number2 + jw;
            }
            str = String.valueOf(temp) + str;
        }
        return str;
    }
}

 


免責聲明!

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



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