Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Mario Olivera en 31 Julio 2014, 21:10 pm



Título: [Solucionado] Problema para sacar factorial de un entero
Publicado por: Mario Olivera en 31 Julio 2014, 21:10 pm
 Hola gente del foro, estoy haciendo un ejercicio que me pide que haga un programa donde se ingrese un número entero no negativo y que imprima su factorial

Ejemplo:
 Si el número ingresado por ejemplo sería 5, para sacar el factorial se hace 5*4*3*2*1= 120, esto mismo intento hacer en el programa, pero no obtengo los resultados que quiero.

Dejo el código de el programa que hice :)

main.cpp
Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::endl;
  4. using std::cin;
  5.  
  6. #include "Factorial.h"
  7.  
  8. int main()
  9. {
  10. int numero;
  11. cout <<"Escriba un numero entero no negativo para calcular su factorial!\n"
  12. <<"Numero: ";
  13. cin >> numero;
  14.  
  15. Factorial Factorial1(numero);
  16. Factorial1.establecerFactorial();
  17. cout <<"El factorial es: " <<Factorial1.obtenerFactorial() <<endl;
  18. cin.get();
  19. cin.get();
  20. return 0;
  21. }
Factorial.h
Código
  1. class Factorial
  2. {
  3. public:
  4. Factorial(int);
  5. //Funciones establecer
  6. void establecerNumero(int);
  7. void establecerFactorial();
  8. //Funciones obtener
  9. int obtenerFactorial();
  10.  
  11. private:
  12. int numeroFactorial;
  13. int resultado;
  14. };
Factorial.cpp
Código
  1. #include <iostream>
  2. using std::cout;
  3.  
  4. #include "Factorial.h"
  5.  
  6. Factorial::Factorial(int numero)
  7. {
  8. establecerNumero(numero);
  9. }
  10.  
  11. //Funciones Establecer
  12.  
  13. void Factorial::establecerNumero(int numero)
  14. {
  15. if (numero > 0)
  16. {
  17. numeroFactorial= numero;
  18. }
  19.  
  20. else
  21. {
  22. cout <<"\nEl numero ingresado no es correcto!\n";
  23. }
  24. }
  25.  
  26. void Factorial::establecerFactorial()
  27. {
  28. int numeroMultiplicador = numeroFactorial - 1;
  29.  
  30. while (numeroMultiplicador != 0)
  31. {
  32. resultado= (resultado + (numeroFactorial * numeroMultiplicador));
  33. --numeroMultiplicador;
  34. }
  35. }
  36.  
  37. //Funciones Obtener
  38.  
  39. int Factorial::obtenerFactorial()
  40. {
  41. return resultado;
  42. }


Desde ya gracias por cualquier ayuda  :)


Título: Re: Problema para sacar factorial de un entero
Publicado por: leosansan en 31 Julio 2014, 22:05 pm
"Creo" que esto te arregla el desajuste:

Código
  1. void Factorial::establecerFactorial()
  2. {
  3. int numeroMultiplicador = numeroFactorial ;
  4. resultado = 1 ;
  5.  
  6. while (numeroMultiplicador != 0)
  7. {
  8. resultado  *=  numeroMultiplicador ;
  9. --numeroMultiplicador;
  10. }
  11. }

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)



Título: Re: Problema para sacar factorial de un entero
Publicado por: Mario Olivera en 31 Julio 2014, 22:53 pm
"Creo" que esto te arregla el desajuste:

Código
  1. void Factorial::establecerFactorial()
  2. {
  3. int numeroMultiplicador = numeroFactorial ;
  4. resultado = 1 ;
  5.  
  6. while (numeroMultiplicador != 0)
  7. {
  8. resultado  *=  numeroMultiplicador ;
  9. --numeroMultiplicador;
  10. }
  11. }


¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)



Hola leosansan

enves de resultado=1 puse resultado= numeroFactorial y ahí andubo

Muchas Gracias por tu ayuda, Saludos!


Título: Re: [Solucionado] Problema para sacar factorial de un entero
Publicado por: eferion en 1 Agosto 2014, 08:25 am
Si luego quieres subir un escalón... también lo puedes hacer con templates:

Código
  1. template< int N >
  2. struct Factorial
  3. {
  4.    enum { value = N * Factorial< N - 1 >::value };
  5. };
  6.  
  7. template<>
  8. struct Factorial< 0 >
  9. {
  10.    enum { value = 1 };
  11. };
  12.  
  13. int main( )
  14. {
  15.  std::cout << "Factorial de 4: " << Factorial< 4 >::value << std::endl;
  16.  std::cout << "Factorial de 5: " << Factorial< 5 >::value << std::endl;
  17. }