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.
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas