通常情況,實現大數運算是通過BigInteger和BigDecimal兩種方法。這兩種方法分別表示不可變的任意精度的整數和不可變的有符號的任意精度的十進制數(浮點數)。主要用于高精度計算中。這兩個類使得java中的大數,高精度運算變得很簡單。但本文介紹的并不是通過上述兩種方法實現Java中的大數運算。
主要的思想是:把兩個數存在String中了,然后將每個數字取出,放到數組,由最末位開始計算,算加法,判斷是否進位,進位則前位+1,若超過長度,則copy到新的數組。
代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
public class BigIntAdd { private int [] array; //聲明一個數組 //計算大數相加的函數 public static String bigAdd(BigIntAdd fisrtNum, BigIntAdd secondNum) { String result = "" ; Boolean falg = false ; //判斷數組是否越界的標志 int [] arrayOne; int [] arrayTwo; int [] arrayThree = null ; //把較長的字符串放到arrayOne數組中,因為要把計算結果放到arrayOne數組中 if (fisrtNum.instance().length >= secondNum.instance().length) { arrayOne = fisrtNum.instance(); arrayTwo = secondNum.instance(); } else { arrayOne = secondNum.instance(); arrayTwo = fisrtNum.instance(); } for ( int i = 0 ; i < arrayTwo.length; i++) { if (arrayOne[i] + arrayTwo[i] < 10 ) { //不需要進位時 arrayOne[i] = arrayOne[i] + arrayTwo[i]; } else if (arrayOne[i] + arrayTwo[i] >= 10 ) { //需要進位時 arrayOne[i] = arrayOne[i] + arrayTwo[i] - 10 ; if ((i + 1 ) < arrayOne.length) { arrayOne[i + 1 ] = arrayOne[i + 1 ] + 1 ; //下一位的值加1 } else { //當arrayOne的長度不夠時要把其復制到arrayThree中 falg = true ; arrayThree = new int [arrayOne.length + 1 ]; System.arraycopy(arrayOne, 0 , arrayThree, 0 ,arrayOne.length); arrayThree[arrayOne.length] = 1 ; //把arrayThree最高位賦值1,等價于進位的1 } } } //把數組arrayThree中的元素全部的拼接為字符串 if (falg) { for ( int i : arrayThree) { result += i; } } else { for ( int i : arrayOne) { result += i; } } //把結果反轉返回 return new StringBuffer(result).reverse().toString(); } //初始化數組方法 private int [] instance() { return array; } //初始化構造方法 public BigIntAdd(String num) { StringBuffer sb = new StringBuffer(num); String string = sb.reverse().toString(); //實現字符串反轉,便于計算 array = new int [string.length()]; //把字符串轉化為數組 for ( int i = 0 ; i < string.length(); i++) { array[i] = Integer.valueOf(string.substring(i, i + 1 )); } } public static void main(String [] args){ String result=BigIntAdd.bigAdd( new BigIntAdd( "5211111111" ), new BigIntAdd( "4099999999" )); System.out.println(result); } } |
結果:
總結
以上就是本文關于java編程實現兩個大數相加代碼示例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
原文鏈接:http://blog.csdn.net/qq_26941173/article/details/74983784