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; } }
