Pregunta Números grandes en Java


¿Cómo haría los cálculos con números extremadamente grandes en Java?

Yo he tratado long pero eso se maximiza en 9223372036854775807, y cuando se usa un entero no guarda suficientes dígitos y por lo tanto no es lo suficientemente preciso para lo que necesito.

¿Hay alguna manera alrededor de esto?


74
2018-05-11 20:02


origen


Respuestas:


Puedes usar el BigInteger clase para enteros y BigDecimal para números con dígitos decimales Ambas clases están definidas en java.math paquete.

Ejemplo:

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

133
2018-05-11 20:04



Utilizar el BigInteger clase que es una parte de la biblioteca de Java.

http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigInteger.html


17
2018-05-11 20:04



Aquí hay un ejemplo que obtiene grandes números muy rápidamente.

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

13
2018-05-11 20:33



Revisa BigDecimal y BigInteger.


11
2018-05-11 20:04



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

6
2017-10-11 12:00



Dependiendo de lo que esté haciendo, le recomendamos echarle un vistazo a GMP (gmplib.org), que es una biblioteca de precisión múltiple de alto rendimiento. Para usarlo en Java necesitas envoltorios JNI alrededor de la biblioteca binaria.

Consulte algunos de los códigos de Alioth Shootout para ver un ejemplo de cómo usarlo en lugar de BigInteger para calcular Pi en una cantidad arbitraria de dígitos.

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


3
2017-09-23 01:13



utilizando el tipo de datos de cadena, resuelve fácilmente este problema.

class Account{
      String acc_no;
      String name;

-7
2017-07-10 07:43