O fatorial de um número n é denotado por n! e corresponde ao produto de todos os naturais de 1 até n. Assumimos que 0! = 1. Utilizando essa definição, o fatorial pode ser definido da seguinte maneira:
n! = 1*2*3*...*n
Desafio
Escrever um programa em C que lê um número inteiro n e calcula n!
Solução
A primeira dificuldade encontrada no problema é que a expressãon! = 1*2*3*...*n não é uma expressão simples que pode ser calculada diretamente. Primeiramente, vamos quebrar a expressão em pedaços menores mais simples que podem ser calculados diretamente e depois juntar os pedaços menores (Quase uma obra de arte). A propriedade associativa da multiplicação permite a decomposição do problema dessa maneira:
n! = ((((1*2)*3)*...*n-1)*n)
Utilizando essa decomposição, podemos calcular a expressão da seguinte maneira:
fat = 1
i = 2
fat = fat*i = 1*2 = 2!
i = i +1
fat = fat*i = fat*3 = (1*2)*3 = 3!
i = i +1
fat = fat*i = fat*4 = ((1*2)*3)*4 = 4!
i = i +1
...
fat = fat*i = fat*n = (((1*2)*3)*...*n-1)*n = n!
Observe que no passo i, estamos calculando o i!. Podemos traduzir essa idéia para um programa em C da seguinte maneira:
#include <stdio.h> int main(){ int i; int n,fat; scanf("%d",&n); fat=1; i=2; while(i<=n){ fat = fat*i; i = i+1; } printf("%d\n",fat); }
Exercício: Refaça o algoritmo considerando a seguinte decomposição
n! = (1*(2*..(n-3*(n-2*(n-1*n)))))
Nenhum comentário:
Postar um comentário