Poder Java do problema de cálculo de números com grandes números [duplicado]

Oct 25 2020

Eu sou novo em Java e quando estava tentando encontrar a potência do número sem o método Math.pow, percebi que a resposta não estava certa. E eu quero saber por quê?

public class Main() {

int x = 1919;
int y = x*x*x*x;

public static void main(String[] args) {

System.out.println(y);
}
}

Resultado: 2043765249

Mas normalmente a resposta é: 13561255518721

Respostas

3 azro Oct 25 2020 at 16:41

Se você for passo a passo, verá que em um momento o valor torna-se negativo, porque você atinge o Integer.MAX_VALUEque é2^31 -1

int x = 1919;
int y = 1;
for (int i = 0; i < 4; i++) {
    y *= x;
    System.out.println(i + "> " + y);
}

0> 1919
1> 3682561
2> -1523100033
3> 2043765249

Você pode usar um tipo maior, como doubleouBigInteger

double x = 1919;

double y = x * x * x * x;
System.out.println(y); // 1.3561255518721E13

BigInteger b = BigInteger.valueOf(1919).pow(4);
System.out.println(b); // 13561255518721
3 MrBorder Oct 25 2020 at 16:41

Você está usando um int para a resposta e está obtendo um estouro numérico.

Use double ou long ou BigInteger para ye você obterá a resposta certa.

public class Main {

    public static void main(String[] args) {
        System.out.println(Math.pow(1919, 4));
        System.out.println((double) 1919*1919*1919*1919);
    }
}

Produz o mesmo valor.

Noname Oct 25 2020 at 16:41

Use em longvez deint

public class Main{
    public static void main(String[] args) {
        long x = 1919;
        long y = x*x*x*x;
        System.out.println(y);
    }
}

Leia sobre variáveis ​​em Java.