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

[Dúvida] Imprimir fatorial por extenso

Implementei o código da fatorial dessa forma, mas não saiu exatamente como eu queria:

public class TestaFatorial {
    public static void main(String[] args) {
        int fatorial = 1;
        for(int i = 1; i <= 10; i++){
            fatorial*= i;
            System.out.println("Fatorial de " + i + " = " + fatorial);
            }
        }
    }

O resultado é:

"Fatorial de 1 = 1
Fatorial de 2 = 2
Fatorial de 3 = 6
(...)
Fatorial de 10 = 3628800"

Exatamente como pedido.

Mas eu queria que o resultado fosse mais ou menos assim:

"Fatorial de 1 = 1 * 1 = 1
Fatorial de 2 = 2 * 1 = 2
Fatorial de 3 = 3 * 2 * 1 = 6
(...)
Fatorial de 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 3628800"

Pensei em algumas soluções, mas não consegui implementar. Alguma sugestão?

2 respostas
solução!

Olá, Jânio Paulo.

Melhor que eu consegui foi isso, man. Se essa for a solução fico grato por ter ajudado um colega. Sobre o código, sempre que o número de colunas for menor ou igual ao de " i " é adicionado um " multiplicador " que é igual a " i - 1 ", quando número de colunas é maior que o valor de i (i é como se fossem as linhas) é adicionado ("=" + fatorial) e a linha é finalizada. Houve a necessidade do número de colunas ser <= 11, pelo motivo já citado anteriormente, de que o número de colunas precisa ser maior que o número de " i " (linhas) para ser adicionado ("=" + fatorial) ao final da última linha. Sugestão: utilize o valor de colunas <= 10 e verá a diferença do resultado no final da última linha.


public class TesteForum {

    public static void main(String[] args) {

        int fatorial = 1;        
        for(int i = 1; i <= 10; i++) {
            fatorial*= i;

            int multiplicador = i;
            for(int colunas = 1; colunas <=  11; colunas++) {                    

                if(colunas == 1) {
                    System.out.print("Fatorial de " + i + " = " + i);                                        

                } else if(colunas <= i) {
                    multiplicador--;
                    System.out.print("*" + multiplicador);

                } else {                    
                    System.out.print(" = " + fatorial);
                    break;                    

                }                

            }
            System.out.println();
        }

    }

}

Resultado é esse:

Fatorial de 1 = 1 = 1
Fatorial de 2 = 2*1 = 2
Fatorial de 3 = 3*2*1 = 6
Fatorial de 4 = 4*3*2*1 = 24
Fatorial de 5 = 5*4*3*2*1 = 120
Fatorial de 6 = 6*5*4*3*2*1 = 720
Fatorial de 7 = 7*6*5*4*3*2*1 = 5040
Fatorial de 8 = 8*7*6*5*4*3*2*1 = 40320
Fatorial de 9 = 9*8*7*6*5*4*3*2*1 = 362880
Fatorial de 10 = 10*9*8*7*6*5*4*3*2*1 = 3628800

Opa, Christian. Exatamente como eu queria! Vou estudar a lógica por trás e tentar aplicar também. Valeu, irmão!