Java中的大数字

我将如何去在Java中进行极大数量的计算?

我已经尝试了long但最大出现在9223372036854775807,当使用一个整数它不能保存足够的数字,因此不足够准确,我所需要的。

有没有办法解决?

您可以使用BigInteger类的整数和BigDecimal的十进制数字的数字。 这两个类都在java.math包中定义。

例:

 BigInteger reallyBig = new BigInteger("1234567890123456890"); BigInteger notSoBig = new BigInteger("2743561234"); reallyBig = reallyBig.add(notSoBig); 

这是一个很快得到大数字的例子。

 import java.math.BigInteger; /* 250000th fib # is: 36356117010939561826426 .... 10243516470957309231046875 Time to compute: 3.5 seconds. 1000000th fib # is: 1953282128707757731632 .... 93411568996526838242546875 Time to compute: 58.1 seconds. */ public class Main { public static void main(String... args) { int place = args.length > 0 ? Integer.parseInt(args[0]) : 250 * 1000; long start = System.nanoTime(); BigInteger fibNumber = fib(place); long time = System.nanoTime() - start; System.out.println(place + "th fib # is: " + fibNumber); System.out.printf("Time to compute: %5.1f seconds.%n", time / 1.0e9); } private static BigInteger fib(int place) { BigInteger a = new BigInteger("0"); BigInteger b = new BigInteger("1"); while (place-- > 1) { BigInteger t = b; b = a.add(b); a = t; } return b; } } 

结帐BigDecimal和BigInteger。

 import java.math.BigInteger; import java.util.*; class A { public static void main(String args[]) { Scanner in=new Scanner(System.in); System.out.print("Enter The First Number= "); String a=in.next(); System.out.print("Enter The Second Number= "); String b=in.next(); BigInteger obj=new BigInteger(a); BigInteger obj1=new BigInteger(b); System.out.println("Sum="+obj.add(obj1)); } } 

根据你在做什么,你可能想看看GMP(gmplib.org)这是一个高性能的多精度库。 要在Java中使用它,你需要在二进制库中使用JNI包装器。

看到一些Alioth枪战代码的例子,用它来代替BigInteger来计算Pi到任意数量的数字。

http://shootout.alioth.debian.org/u32q/benchmark.php?test=pidigits&lang=java&id=3

使用string数据types,你很容易解决这个问题。

 class Account{ String acc_no; String name;