Salve a todos. Primeiro post aqui e quero propôr um desafio de programação a vocês, motivado pelo tópico do dvd.Desafios são legais e muitas vezes você desenvolve algorítmos que usará em programas posteriormente.
Você terá que escrever um programa que retorne o fatorial dos números de 25 a 30.
Devem ser mostrados todos os números dos fatoriais, e não notação científica.
Não pode ser usadas bibliotecas para cálculos matemáticos feitas por terceiros, como a GMP ou NTL. Sò as criadas por você.
Abraço.
Aew \o/
Bom se eu intendi bem vc queria uma funcao de fatora que retorna os valores sem notacao cientifica...
Fiz correndo aqui mas funfa blz
double Fatora(double n) {
double r=n;
for(;n>1;n--)
r*=n-1;
return r;
}
int main() {
printf("%.f\n",Fatora(30));
system("pause");
}
Certei?
Não enteni muito bem o desafio, poderia explicar melhor??
É eu tbm to com duvidas =L
Quote from: "dvd"Aew \o/
Bom se eu intendi bem vc queria uma funcao de fatora que retorna os valores sem notacao cientifica...
Fiz correndo aqui mas funfa blz
double Fatora(double n) {
double r=n;
for(;n>1;n--)
r*=n-1;
return r;
}
int main() {
printf("%.f\n",Fatora(30));
system("pause");
}
Certei?
É quase isso mesmo, uma rotina pra calcular fatorial dos números entre 25 e 30.
Mas você pode perceber que a partir de certo número, seu fatorial é muito grande pra caber num double, e é preciso mostrar todos os números.
Pense em BigInts.
Abraço.
Bom o esquema é aquele ali mesmo
Maior q isso so long double que aceita 12 bytes
int fat(int a)
{
if (a)
return (a * fat(a-1));
else
return(1);
}
Quote from: "dvd"Bom o esquema é aquele ali mesmo
Maior q isso so long double que aceita 12 bytes
Isso dvd, o objetivo mesmo é calcular o fatorial de números a partir do qual o resultado não caiba no maior tipo de dado possível. Não olhei se 26!-30! cabe num long double, mas esse tipo é dependente de compilador e plataforma.
Tava vendo aqui e esqueci do pessoal que já usa computador e SO de 64 bits, então é bom aumentar o range de 25-30 para 95-100.
Não é um desafio tão simples, pois quem quiser trabalhar com BigInts vai mecher com array de ints ou char.
Quem quiser ir acompanhando se os fatoriais estão corretos pode visualizar aqui:
http://membres.lycos.fr/rsirdey/facttabl.htm (http://membres.lycos.fr/rsirdey/facttabl.htm)
usa unsigned int... é o maior que tem acho...
unsigned int nao é maior que long double =x
Bem fácil e simples de fazer usando recursividade...
Abraços