Pessoal eu to estudando para maratona de programação desse ano e achei um site de desafios… O problema que estou estudando é esse:
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.
Eu entendi assim… Encontre a soma de todos os multiplos de 3 ou 5 abaixo de 1000. Então fiz este codigo.
public class Multiplo{
public static void main(String args[]){
int x = 0, y=0,i=999;
int sm3 = 0, sm5 =0, st =0;
while(i>=1){
x = i % 3;
if(x==0){
sm3 += i;
}
y = i % 5;
if(y==0){
sm5 += i;
}
i--;
}
st = sm3 + sm5;
System.out.println(st);
}
}
Quando eu coloco o i = 9 da tudo certo, isto é, 23. Mas quanto faço com numeros grandes da uma zica. tipo a resposta é 266333. E quando fui dar a resposta no sistema deu errado… Alguem sabe onde ta o erro?
Mas se eu fosse você, capricharia mais na identação. De repente até lhe ajuda a entender melhor o próprio código e consecutivamente um possível erro.
Eu também acho que deverias usar um loop “for” ao invés de um “while”.
Eu acho uma boa prática de programação usar “for” quando você tiver em mãos a necessidade de um loop orientado a contadores. Creio que é bem versátil.
E eu também faria diretamente no if a verificação do módulo, ou seja, colocaria no espaço de verificação do “if” ao invés de criar uma variável a parte para comparar!
Bom, já desviei o assunto demais…
Eu executei aqui no Eclipse e deu exatamente 266333.
Se for o que o site diz que precisa chegar pelo menos aqui deu certo!
EDIT:
Dei uma brincada no código via Eclipse, espero que goste:
[code]public class zzz {
public static void main(String args[]){
int sm3 = 0, sm5 =0, st = 0;
for( int i = 0 ; i <= 999 ; i++){
if( (i%3 )== 0 ){
sm3 += i;
}
if((i%5)==0){
sm5 += i;
}
}
st = sm3 + sm5;
System.out.println(st);
}
}
[/code]
Onde vc cadastrou para participar dessa maratonba de programação?Vc ja participou de algum concurso da ibm ?Se poder me passar essas informações eu te agradeço.
rpz… acho que teu codigo tem um probleminha.
Ele nao remove as interseções.
Ex: 15 eh multiplo de 3
15 tb eh multiplo de 5
so que vc esta somando os dois…
eu faria assim: