Java中的大数字

时间:2009-05-11 20:02:50

标签: java numbers integer biginteger

我如何在Java中使用极大数字进行计算?

我已经尝试long,但是最大值为9223372036854775807,并且当使用整数时,它不能保存足够的数字,因此不够准确,无法满足我的需要。

到底有没有?

7 个答案:

答案 0 :(得分:144)

您可以将BigInteger类用于整数,将BigDecimal用于带小数位数的数字。这两个类都在java.math包中定义。

示例:

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

答案 1 :(得分:18)

答案 2 :(得分:15)

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

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;
    }
}

答案 3 :(得分:12)

结帐BigDecimalBigInteger

答案 4 :(得分:6)

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));
    }
}

答案 5 :(得分:3)

根据您正在做的事情,您可能希望了解GMP(gmplib.org),这是一个高性能的多精度库。要在Java中使用它,您需要围绕二进制库的JNI包装器。

请参阅一些Alioth Shootout代码,了解使用它代替BigInteger将Pi计算为任意位数的示例。

https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/pidigits-java-2.html

答案 6 :(得分:-8)

使用字符串数据类型可以轻松解决此问题。

class Account{
      String acc_no;
      String name;