Soma de ímpares e multiplicação de pares [RESOLVIDO]
8 respostas
G
gilmarostjen
Este é basico, mas devo estar errando alguma coisa e não percebendo alguma falha na lógica.
O exercício que me foi proposto foi o seguinte:
"Escreva um programa que imprima na tela
a soma dos números ímpares entre 1 e 30 e a
multiplicação dos números pares entre 1 e 30."
Fiz o código assim:
importjavax.swing.JOptionPane;classNumeros{publicstaticvoidmain(String[]args){intx=0,par=0,impar=0;inti,mp,si,totalPar;for(i=0;i<30;i++){if(i%2==0){if(i>2){par=par*i;}else{par=i;}}else{impar=impar+i;//estedeucerto:225}}JOptionPane.showMessageDialog(null,"Soma dos ímpares é: "+impar);JOptionPane.showMessageDialog(null,"Multiplicação dos pares é: "+par);}}
Pois é.
A soma dos ímpares, tranquilo.
O problema (se é que há um) está na multiplicação dos pares. O resultado obtido com o código é "-905969664".
Mas quando faço na calculadora, o resultado obtido é: "1428329123020800".
O tipo primitivo int tem uma limitação, ele vai até 62 mil e algumas coisas.
Altere para long e então terá o resultado esperado.
D
drsmachado
MichelSante:
Leia sobre pre incremento e pos incremento.
E mude a forma de somar e de multiplicar que vc vai perceber o problema…
Bem, não vi nada relacionado a pré ou pós incremento.
Tampouco a forma de multiplicar está errada…
A questão é o tamanho do valor gerado, nada mais.
R
rmendes081 like
Troque
for(i=0; i<30; i++){
por
for(i=1; i <= 30; i++){
e utilize variáveis do tipo long ao invés de int.
J
JonaTHANNM
O problema é que um int não vai suportar o valor que vai ser multiplicado…
importjavax.swing.JOptionPane;classNumeros{publicstaticvoidmain(String[]args){intx=0,impar=0;inti,mp,si,totalPar;Longpar=newLong(0);for(i=0;i<30;i++){if(i%2==0){if(i>2){par=par*i;}else{par=newLong(i);}}else{impar=impar+i;//este deu certo: 225 }}JOptionPane.showMessageDialog(null,"Soma dos ímpares é: "+impar);JOptionPane.showMessageDialog(null,"Multiplicação dos pares é: "+par);}}
G
gilmarostjen1 like
Aee!
É isso mesmo drsmachado, era o int que não suportava o valor.
Isso que no começo desta semana eu fiz uma tabela com os valores máximos de cada variável (li no Use a Cabeça e tomei nota, hehehe).
Valeu a todos pela ajuda.
Té.
D
drsmachado
Tranquilo. Apenas edite o tópico original, colocando [resolvido] no título.
Outra coisa, esse tipo de situação é bastante comum. Embora no cotidiano não tenhamos situações em que isto seja cobrado, é bem fácil se perder.
V
ViniGodoy1 like
Para um enunciado assim, temos algumas alternativas.
"Escreva um programa que imprima na tela a soma dos números ímpares entre 1 e 30 e a multiplicação dos números pares entre 1 e 30."
Alternativa 1 (menos flexível, mas a mais fácil de implementar e rápida em tempo de execução):
publicclassFacil{publicstaticvoidmain(String[]args){System.out.println("Soma dos ímpares entre 1 e 30: 225");System.out.println("Multiplicação dos pares entre 1 e 30: 42849873690624000");}}
Alternativa 2 (provavelmente a que seu professor espera):