1 /** 2 * 兩個大數相減,默認沒有符號位,且都為正數 3 * 4 * @param a 5 * @param b 6 * @return 7 */ 8 public static String bigDigitalSub(String a, String b) { 9 //翻轉字符串並轉化成數組 10 char[] aArray = new StringBuilder(a).reverse().toString().toCharArray(); 11 char[] bArray = new StringBuilder(b).reverse().toString().toCharArray(); 12 int aLength = aArray.length; 13 int bLength = bArray.length; 14 //找到最大的位數,兩個整數的差的位數小於等於兩個整數中的最大位數 15 int maxLength = aLength > bLength ? aLength : bLength; 16 int[] result = new int[maxLength]; 17 //判斷結果符號 18 char sign = '+'; 19 if (aLength < bLength) sign = '-'; 20 else if (aLength == bLength) { 21 int i = maxLength - 1; 22 while (i > 0 && aArray[i] == bArray[i]) 23 i--; 24 if (aArray[i] < bArray[i]) 25 sign = '-'; 26 } 27 //開始計算結果集 28 for (int i = 0; i < maxLength; i++) { 29 int aInt = i < aLength ? aArray[i] - '0' : 0; 30 int bInt = i < bLength ? bArray[i] - '0' : 0; 31 if (sign == '-') result[i] = bInt - aInt; 32 else result[i] = aInt - bInt; 33 } 34 //處理結果集,如果結果集中的某一位小於0,則向高位借位,然后將本位加10 35 for (int i = 0; i < maxLength - 1; i++) { 36 if (result[i] < 0) { 37 result[i + 1] -= 1; 38 result[i] += 10; 39 } 40 } 41 42 //處理結果集,轉化成真正結果 43 StringBuffer realResult = new StringBuffer(); 44 if (sign == '-') realResult.append('-'); 45 boolean isBeginning = true; 46 for (int i = maxLength - 1; i >= 0; i--) { 47 if (result[i] == 0 && isBeginning) continue; 48 else isBeginning = false; 49 realResult.append(result[i]); 50 } 51 if (realResult.toString().equals("")) realResult.append('0'); 52 return realResult.toString(); 53 }