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

Mais um desafio (soma de todos os fatoriais)

Olá,

Eu realizei a atividade do fatorial e me propus mais um desafio. Depois de realizar a lista de fatoriais gostaria de realizar a soma do resultado de todos os fatoriais (de 1 até 10). O que realizei foi isso:

{ int fatorial = 1;

        for (int i = 1; i < 11; i++)
        {fatorial *= i;
            System.out.println("Fatorial de " + i + " = " + fatorial); }

        while (fatorial<=10){
            int fatorial++;
            System.out.println(fatorial);
        }

O Java não deixa eu utilizar novamente a variável "fatorial" porque ela já foi definida com 1 no começo do código.

  1. Alguém sabe como o Java me deixa utilizar novamente a variável fatorial?
  2. Isso que eu fiz esta correto. É a soma de todos os fatoriais de 0 até 10?
2 respostas
solução!

Bom dia!

Sobre o primeiro problema, o Java permite utilizar a variável fatorial novamente, o problema está na linha abaixo do while (int fatorial++), por causa do int parece que você está tentando criar outra variável do tipo inteiro também nomeada de fatorial (e isso realmente não pode...)

Para corrigir essa parte, você pode fazer isto:

while (fatorial <= 10) {
    fatorial++;
    System.out.println(fatorial);
}

Mas perceba que do jeito que está, nem entraria no bloco while, visto que o valor fatorial já seria maior que 10 (por conta do for anterior).

Sobre o segundo ponto, isso não seria a soma de todos os fatorias, caso o while funcionasse, só iria atuar como um contador. Uma possibilidade é utilizar uma variável auxiliar, tipo assim:

int fatorial = 1;
int somaFatorial = 0;

for (int i = 1; i < 11; i++) {
    fatorial *= i;
    somaFatorial += fatorial;
    System.out.println("Fatorial de " + i + " = " + fatorial);
}

System.out.println("A soma de todos os fatorias é: " + somaFatorial);

Perceba que é possível realizar em apenas um laço, mas caso realmente queira utilizar o while, pode fazer assim:

int fatorial = 1;
int somaFatorial = 0;

for (int i = 1; i < 11; i++) {
    fatorial *= i;
    System.out.println("Fatorial de " + i + " = " + fatorial);
}

fatorial = 1;
while (fatorial < 11) {
    fatorial *= i;
    somaFatorial += fatorial;
}

System.out.println("A soma de todos os fatorias é: " + somaFatorial);

Dessa forma mantive a ideia inicial de usar o while, mas acredito que com ela é perdido desempenho... Espero ter ajudado :)

Boa tarde,

Muito obrigada. Realmente agora deu certo.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software