Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como mostrar cada multiplicação do fatorial

Fala pessoal, tudo certo? Eu realizei o exercício de fatorial que foi passado no curso, porém eu estava querendo uma implementação um pouco diferente, mas não sei realizar ela. Eu gostaria de que a cada número fosse mostrado todas as suas multiplicações, Ex: Fatorial de : 3 * 2 * 1 = 6 Fatorial de : 4 * 3 * 2 * 1 = 24

Alguém poderia me dar uma dica ou uma luz de como fazer essa implementação?

2 respostas

Thiago, bom dia!

Você precisa fazer um laço de repetição onde irá multiplicar todos os números, de 2 até o número desejado(estou considerando 2 porquê 1xQualquer número é ele mesmo). Você pode fazer essa implementação:

int fat = 1;
int valor = 5; //ou qualquer outro valor que queira calcular;
for( int i = 2; i <= valor; i++ )
{ 
     fat *= i;
}
System.out.println( "O fatorial de " + valor + " é igual a " + fat );
}

Espero ter ajudado e bons estudos!

solução!

Thiago, boa noite!

Você precisa fazer um laço de repetição onde irá multiplicar todos os números, de 1 até o número desejado, de uma string para guardar a expressão, e de uma variável que vai guardar o valor final. Você pode fazer essa implementação:


public class MyClass {
    public static void main(String args[]) {
        int contador, auxiliar, fatorial;
        StringBuilder fatorialExpressao = new StringBuilder("");
        for(contador=1; contador<6;contador++){
            fatorial = 1;
            for(auxiliar=1;auxiliar<=contador;auxiliar++){
                fatorialExpressao.append(Integer.toString(auxiliar));
                if(auxiliar != contador)
                    fatorialExpressao.append('*');
                fatorial *= auxiliar;
                System.out.print(auxiliar +" ");
            }
            System.out.println();
            System.out.println("fatorial("+contador+")  = " + fatorial + " = "+fatorialExpressao.toString());
            fatorialExpressao.setLength(0);
        }
    }
}

A classe StringBuilder é uma classe que nos ajuda a montar Strings, então cada vez que vamos multiplicar o número no fatorial juntamos ele na expressão, e caso ele não seja o ultimo adicionamos um asterisco representando a multiplicação. Precisamos de uma variavel para guardar o valor do fatorial, de uma variavel que sera o nosso contador utilizado para ficarmos multiplicando o resultado, assim temos:

f(5) = 5 * f(4)
f(4) = 5 * f(3)
f(3) = 5 * f(2)
f(2) = 2 * f(1)
f(1) = 1

resultando em

f(5) = 5 * 24
f(4) = 4 * 6
f(3) = 3 * 2
f(2) = 2 * 1
f(1) = 1

Colocando apenas resultados temos:

f(5) = 5 * 4 * 3 * 2 * 1

Dica: Procure sobre recursão, é uma forma mais fácil de implementar funções assim, o fatorial por conta de ser uma expressão que o resultado depende dela mesma fica mais fácil de implementar.

Curiosidade fica a implementação da função fatorial recursiva:

public class MyClass {

    public static int fatorial(int valor){
        if(valor == 1 || valor == 0){
            System.out.print("1");
            return 1;
        }
        System.out.print(valor + " * ");
        return fatorial(valor-1) * valor;
    }

    public static void main(String args[]) {
        int contador, fatorial;
        for(contador=5; contador>0;contador--){
            fatorial = 1;
            System.out.print("fatorial("+contador+")  = ");
            fatorial = fatorial(contador);
            System.out.println(" = " + fatorial);
        }
    }
}

Que vai devolver

fatorial(5)  = 5 * 4 * 3 * 2 * 1 = 120
fatorial(4)  = 4 * 3 * 2 * 1 = 24
fatorial(3)  = 3 * 2 * 1 = 6
fatorial(2)  = 2 * 1 = 2
fatorial(1)  = 1 = 1

Abraços!