計算兩個字符串的減法運算


 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     }

 


免責聲明!

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



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