Ir ao conteúdo

Posts recomendados

Postado

tenho esse problema e não consigo resolver:

 

A Sucessão de Fibonacci é uma sequência de números inteiros, começando normalmente por 0 ou 1, na qual, cada termo subsequente corresponde à soma dos dois termos anteriores. Em termos matemáticos, a sequência é definida recursivamente pela fórmula abaixo:

f(0) = 1 f(1) = 1 ... f(n) = f(n-1) + f(n-2)

Matematicamente, a sucessão pode ser calculada até o infinitésimo elemento. Entretanto, o computador é limitado aos números que consegue armazenar - por exemplo não é possível armazenar 5⋅1095⋅109 em um tipo int. Ainda bem que os alunos de APC se recusam a aceitar estes limites e resolveram calcular o valor do ii-ésimo elemento da sequência com até 1000 dígitos usando uma ideia muito simples: armazenar os dígitos em um vetor de 1000 elementos.

Entrada
A entrada consiste de um valor inteiro nn (1≤n<47861≤n<4786), indicando qual elemento da sucessão se deseja.

Saída
A saída consiste de uma linha apresentado o valor do nn-ésimo elemento da sucessão.

 

a sucessão de Fibonacci eu consigo desenvolver, porém ela não funciona para numeros como 100, 1000, 2000... por da resultados muito grande e não caber em um inteiro! vi uma imagem aqui com a solução, porém não tinha o codigo!

alguem teria um codigo para este problema???

 

 

image.png

Postado
27 minutos atrás, Eder Neumann disse:

ou ainda texto, mas não sei se ele calcula daí

 

Isso o valor é um texto, cada valor é um cstring, os números estão invertidos do menos ao mais significativo por conta disso há função só para imprimir o valor na ordem correta.

Postado
agora, Eder Neumann disse:

parece que ajudei de alguma forma mas não entendi nada 🤣😅

Sua hipótese está correta! Alguém vai aparecer para elucidar isso melhor.

Estou sem tempo agora!

 

Obrigado.

  • Curtir 1
Postado
Citação

e resolveram calcular o valor do ii-ésimo elemento da sequência com até 1000 dígitos usando uma ideia muito simples: armazenar os dígitos em um vetor de 1000 elementos

 

Como está aí: a ideia é simples: um vetor de 1000 dígitos, que você pode representar de qualquer maneira. E cria uma função para somar e outra para mostrar e tal. Naturalmente nenhum tipo primitivo daria uma representação precisa para 1000 dígitos.

 

Um byte vai até 255 por exemplo, nem 3 dígitos.Pode ver os limites em <climits> ou limits.h 

 

Em resumo
limits.png.b95a6ac7e252c772edb6819f2fc805a9.png

 

O que se faz é só fazer as contas como se faz no papel, mas com até 1000 dígitos e armazenando os resultados no vetor. Soma, quando passa de 10 "vai um" e passa pro próximo dígito e tal. Como no primário

 

Esses são os primeiros 6 números da sequência 1, 1, 2, 3, 5, 8. Para calcular o sétimo

05
08 +
13

Sem pensar muito, com vetores

char P1[1000];
char P2[1000];
char T [1000];

pode simular as operações. Vai somando dígito a dígito a partir da direita como faz no papel. Só isso. Quando chegar no primeiro zero a esquerda pode parar claro: 5 + 8 = 13 então T[999] = 3 e T[998] = 1. E por aí vai. Pode ir gravando a partir do índice zero também claro. Escolha a lógica que te parecer melhor.

 

Na hora de imprimir mostra os dígitos grudadinhos e pronto. Eu agruparia tipo 40 ou 50 dígitos por linha pra ficar mais organizado e não como no programa que mostrou

 

Citação


A entrada consiste de um valor inteiro nn (1≤n<47861≤n<4786), indicando qual elemento da sucessão se deseja.

 

 

Isso eu não entendo. A entrada era pra ser um número entre 1 e 1000 para mostrar o valor de Fib(n)

 

 

Postado

E aí? Progresso com o programa?

Estive pensando nisso agora e recomendo gravar os números ao contrário no vetor, o dígito menos significativo primeiro pra facilitar as operações ;) aí usa acho que um loop só e menos contas de índices.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...