Actualmente estoy tratando de resolver un problema de hacketerrank, el problema en cuestión se denomina Fibonacci modificado.

El método devuelve un INT, pero se espera que obtenga enormes valores. Estoy resolviendo este problema en Java.

Aquí está mi código

static int fibonacciModified(int t1, int t2, int n) {

    BigInteger[] f = new BigInteger[n];
    f[0] = BigInteger.ZERO;
    f[1] = BigInteger.ONE;
    BigInteger value = BigInteger.ONE;

    for(int i = 2; i < n; i++) {
        f[i] = f[i-1].multiply(f[i-1]).add(f[i-2]);
        value = f[i];
    }

    return value.intValue();
}

Estoy fallando el caso de prueba cuando T1 = 0, T2 = 1, N = 10. Mi salida es -1022889632. La respuesta correcta es 8426613096281243382112. Si cambio el método para devolver un biginteger, entonces obtengo la respuesta correcta.

Editar: Este es el enlace al problema https://www.hackerrank.com/challenges / Fibonacci-modificado / problema

2
AslanH 29 may. 2021 a las 21:44

1 respuesta

La mejor respuesta

Usted no puede, El valor máximo para int es 2,147,483,647 (32 bits de valor). Si necesita grandes números, debe usar el tipo de variable apropiado.

Si por alguna razón desea evitar BigInteger en absoluto y usted no va a realizar ninguna operación aritmética más adelante, siempre puede devolver un String


Acerca de El problema de Hackerrank, simplemente modifique el tipo de variable de resultado a {{x0} }. En realidad, parecen estar al tanto del problema de 32/64 bits ... están utilizando un valor String para evitarlo. ingrese la descripción de la imagen aquí

No hay razón para mantener toda la estructura de la plantilla de código. Sólo se preocupan por la entrada / salida. Se le permite modificar todo, excepto esas dos cosas.

Esta es su entrada : ingrese la descripción de la imagen aquí

Esta es su la salida (aquí puede ver que se espera que su producción sea un String): ingrese la descripción de la imagen aquí

4
Luis Limas 31 may. 2021 a las 01:26