java中两个大数之间的相关运算及biginteger两段实例代码,具体如下。
大数相减
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
import java.util.scanner; /* 进行大数相减,只能对两个正数进行相减 */ public class bignumber { public static void main(string[] args) { scanner scan= new scanner(system.in); string a,b; while (scan.hasnext()) { bignumber big= new bignumber(); a=scan.nextline(); b=scan.nextline(); system.out.println(big.bignumbersub(a,b)); } } public string bignumbersub(string x,string y) { //string result=null; char [] a=x.tochararray(); char [] b=y.tochararray(); int lena=a.length; int lenb=b.length; int len=lena>lenb?lena:lenb; int [] result= new int [len]; //字符串反转 char [] a= new char [lena]; char [] b= new char [lenb]; for ( int i= 0 ;i<lena;i++) { a[i]=a[lena-i- 1 ]; } for ( int j= 0 ;j<lenb;j++) { b[j]=b[lenb-j- 1 ]; } //判断最终结果的正负 char sign= '+' ; if (lena<lenb) { sign= '-' ; } else if (lena>lenb) { sign= '+' ; } else { for ( int i=lena- 1 ;i>= 0 ;i--) { if (a[i]<b[i]) { sign= '-' ; break ; } else if (a[i]>b[i]) { sign= '+' ; break ; } } } // int aint,bint; for ( int i= 0 ;i<len;i++) { aint=i<lena?a[i]- '0' : 0 ; bint=i<lenb?b[i]- '0' : 0 ; if (sign== '+' ) { result[i]=aint-bint; } else { result[i]=bint-aint; } } //借位处理 for ( int j= 0 ;j<len;j++) { if (result[j]< 0 ) { result[j+ 1 ]=result[j+ 1 ]- 1 ; result[j]=result[j]+ 10 ; } } //将结果对应为0的位置取消掉 stringbuilder sb= new stringbuilder(); boolean flag= true ; //防止结果集中的地位出现0 if (sign== '-' ) { sb.append(sign); } for ( int i=len- 1 ;i>= 0 ;i--) { if (result[i]== 0 &&flag) { } else { sb.append(result[i]); flag= false ; } } return sb.tostring(); //return result; } } |
结果:
在java中,还可以通过biginteger类来解决精度问题。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import java.util.scanner; import java.math.biginteger; /* 进行大数相加, */ public class bignumber { public static void main(string[] args) { scanner scan= new scanner(system.in); while (scan.hasnext()) { biginteger b1= new biginteger(scan.nextline()); biginteger b2= new biginteger(scan.nextline()); system.out.println(b1.add(b2)); //system.out.println(000); } } } |
结果
接着再看一则代码示例:
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
|
/** * 大数运算 * biginteger * 求91的5次方 * 求它除以100的余数 * 大数运算biginteger类的方法调用 */ package com.test1; import java.math.*; import java.math.biginteger; public class test100 { /** * @param args */ static biginteger k=biginteger.valueof( 1 ); static biginteger j=biginteger.valueof( 91 ); static biginteger n; bigdecimal l= new bigdecimal( "100" ); static biginteger m= new biginteger( "100" ); public static void main(string[] args) { // todo auto-generatedmethod stub // k=biginteger.valueof(1); // k=new biginteger("1"); for ( int i= 1 ;i<= 5 ;i++){ k=k.multiply(j); system.out.println(k.tostring()); // n=k.remainder(m); n=k.remainder(m); system.out.println(n.tostring()); } } } |
结果:
总结
以上就是本文关于java中两个大数之间的相关运算及biginteger代码示例的全部内容,希望对大家有所帮助。如有不足之处,欢迎留言指出。
原文链接:http://www.cnblogs.com/xh0102/p/5767530.html