Código para receber um número e calcular sua fatorial, usando apenas Scanner e While

5 respostas
H
package exercicioseder;

import java.util.*;

public class ExercicioER10 {

	public static void main(String args[]) {

		Scanner sc = new Scanner(System.in);

		int fatorial = 1, numero, cont1 = 0, numerom = 1;
		while (cont1 < 90) {
			System.out.println("Digite um número inteiro positivo: ");
			numero = sc.nextInt();

			if (numero == 0) {
				System.out.println("Fatorial de 0 é 1.");
			}
				
				while (numerom <=numero) {
					fatorial = fatorial * numerom;
					numerom++;
					
				}
				System.out.println("Fatorial de " + numero + " é " + fatorial+ ".");
				cont1++;
			}
		
	}
}

O código funcionou até certo ponto, se eu por os números em ordem crescente, no número 20, as fatoriais começam a serem dadas negativas. Se digitar os números em ordem decrescente, a fatorial do número maior passa a ser a mesma para os números menores digitados posteriormente. Eu só posso utilizar "while" e "Scanner", e preciso receber um número do usuário, calcular sua fatorial e repetir esse processo várias vezes.
Quero que o programa, ao dar o resultado(fatorial do numero recebido), comece do zero, sem aproveitar nenhum número que foi recebido por ele anteriormente.

Ainda estou em Fundamentos e sei que tem aquela história de ensinar a pescar, mas não dar o peixe. Porém pessoal, eu estou aqui como última esperança, já fucei esse fórum todo e não achei solução, e não só aqui, há horas eu estou parado nesse programinha tão pequeno, isso deixa qualquer iniciante frustrado.
Espero que não tenha feito algo errado, e agradeço se alguém for paciente e prestativo para me ajudar, porém desde já, obrigado!

5 Respostas

E

12! é o maior fatorial que pode ser calculado usando int.
20! é o maior fatorial que pode ser calculado usando long.
Não é exatamente que está “dando negativo” mas que você está usando os tipos de dados errados.
Com double, você pode ir até 170!

H

entanglement:
12! é o maior fatorial que pode ser calculado usando int.
20! é o maior fatorial que pode ser calculado usando long.
Não é exatamente que está “dando negativo” mas que você está usando os tipos de dados errados.
Com double, você pode ir até 170!

Muito obrigado! nem tinha percebido isso…
Mas em relação ao problema da substituição, que o valor maior é adotado pelo que deveria ser menor, penso eu que ele repete, mas utiliza os valores anteriores, quero que ele comece do zero, alguém pode me esclarecer isso?

E

Por que é que os professores não ensinam mais a desenhar fluxogramas? Se desenhasse um fluxograma, iria perceber onde é que você “zera” as suas variáveis:

int fatorial = 1, numero, cont1 = 0, numerom = 1;

Experimente fazer algo parecido com isso depois de ter obtido e impresso o resultado.

H

Perdão pela demora, ando muito ocupado ultimamente...

Excelente, funcionou perfeitamente, como eu desejava!

Muito obrigado pela ajuda! :thumbup:

Segue o código final:

package exercicioseder;

import java.util.*;

public class ExercicioER10 {

	public static void main(String args[]) {

		Scanner sc = new Scanner(System.in);

		double fatorial = 1, numero, cont1 = 0, numerom = 1;
		while (cont1 < 90) {
			System.out.println("Digite um número inteiro positivo: ");
			numero = sc.nextInt();

			if (numero == 0) {
				System.out.println("Fatorial de 0 é 1.");
			}
				
				while (numerom <=numero) {
					fatorial = fatorial * numerom;
					numerom++;
					
				}
				System.out.println("Fatorial de " + numero + " é " + fatorial+ ".");
				fatorial = 1;
				numerom = 1;
				cont1++;
				 
			}
		
	}
}
B

Segue uma ajuda para quem procurar neste post, fiz assim usando o While e valor Inteiro como pede o exercício no Deitel,

import java.util.Scanner;
public class Fatorial {
	public static void main(String[] args) {
		int fatorial;
		int resultado = 1;
		int cont = 1;
		Scanner input = new Scanner(System.in);
		System.out.println("Informe um valor inteiro não negativo:");
		fatorial = input.nextInt();
		while (fatorial &lt; 0) {
			System.out.println("Entrada Inválida! Informe um valor inteiro não negativo:");
			fatorial = input.nextInt();
		}
		if ( fatorial == 0 ) {	
			System.out.println("O fatorial de " + fatorial + " é: 1");
		}
		while (cont &lt;= fatorial) {
			resultado = resultado * cont;
			cont++;
		}
		System.out.println("Fatorial de " + fatorial + " é: " + resultado);
	}
}
Criado 3 de junho de 2012
Ultima resposta 30 de out. de 2012
Respostas 5
Participantes 3