Problema com exércício de seqüencia Fibonacci - Ajuda!

14 respostas
DavidUser
Era o seguinte era pra fazer a seqüência de fibonaci ex.: 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... e somar os fatores menores que 4000000. ta ai oq eu fiz ta até fazendo a seqüência correta mais mesmo assim a soma da errada.
public class p2 {
    public static void main(String[]args){
        long x=1,y=2,sum=0;       
        
        while(y<4000000 & x<4000000){
        x=x+y;
        y=y+x;
        sum+=x+y;
        System.out.println(" x:"+x+" y:"+y+"\tsum="+sum);
        }
        sum+=+3-x-y;
        System.out.println("sum="+sum+"\t\t"+x+"    "+y);
        //System.out.println(" x:"+x+" y:"+y);
        }
}
Saída: [size=9]init: deps-jar: Compiling 1 source file to C:\... compile-single: run-single: x:3 y:5 sum=8 x:8 y:13 sum=29 x:21 y:34 sum=84 x:55 y:89 sum=228 x:144 y:233 sum=605 x:377 y:610 sum=1592 x:987 y:1597 sum=4176 x:2584 y:4181 sum=10941 x:6765 y:10946 sum=28652 x:17711 y:28657 sum=75020 x:46368 y:75025 sum=196413 x:121393 y:196418 sum=514224 x:317811 y:514229 sum=1346264 x:832040 y:1346269 sum=3524573 x:2178309 y:3524578 sum=9227460 x:5702887 y:9227465 sum=24157812 sum=9227463 5702887 9227465 CONSTRUÍDO COM SUCESSO (tempo total: 2 segundos)[/size] A soma da errado e infelizmente eu não tenho a resposta

14 Respostas

Lavieri

precisa de números extremamente grande, use BigInteger...

para somar BigInteger...

BigInteger x = BigInteger.ZERO;
BigInteger y = BigInteger.ONE;

x = x.add(y);
y = y.add(x);
sum = sum.add(x).add(y);
DavidUser

já to usando o long!

DavidUser

como se usa o bigInteger?

Lavieri
DavidUser:
como se usa o bigInteger?
BigInteger x = BigInteger.ZERO; //o mesmo que BigInteger x = new BigInteger("0");
BigInteger y = BigInteger.ONE; //o mesmo que BigInteger y = new BigInteger("1");

x = x.add(y); //x = x + y;
y = y.add(x); //y = y + x;
sum = sum.add(x).add(y); // sum = sum + x + y
DavidUser

dai agora o condicional “while” não pode ser usado!
e afinal onde foi q estourou?

Lavieri
DavidUser:
dai agora o condicional "while" não pode ser usado! e afinal onde foi q estourou?

logico que pode

BigInteger valueMaximum = new BigInteger("4000000");

//x.compareTo(valueMaximum) retorna um int, 
//menor que zero, quando x é menor que valueMaximum, 
//maior que zero, quando x é maior que valueMaximum,
//igual a zero, quando x e valueMaximum são iguais.
while(x.compareTo(valueMaximum) < 0 && y.compareTo(valueMaximum) < 0) {
  
 ...

}

compareTo é um teste de ordenação, padrão usado em java, para verificar se um objeto vem antes ou depois de outro... qualquer objeto pode implementar esse teste, implementado a interface Comparable...

DavidUser

Falei não tinha estourado antes!
Deu o mesmo resultado

DavidUser

eita! PROBLEMA SEM SOLUÇÃO
vo fala viw

Lavieri

DavidUser:
Falei não tinha estourado antes!
Deu o mesmo resultado

o q vc ker ?? … a resposta para o indice 4.000.000 da sequencia de fibonaci ?? ou vc ker somar todos os valores do indice 1 ao indice 4.000.000 ??

DavidUser

a soma dos índices de 1 aos menores q 4,000,000

DavidUser

olha vc mesmo o problema ta ai:

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …

Find the sum of all the even-valued terms in the sequence which do not exceed four million.

M

Cuidado com problemas que você pega da Internet. Principalmente quando estão em outras línguas…

“even-valued” significa números pares.

DavidUser

Oo

DavidUser

Brigadão

Criado 11 de abril de 2009
Ultima resposta 11 de abr. de 2009
Respostas 14
Participantes 3