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
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
#include "Factorial.h"
int main()
{
int numero;
cout <<"Escriba un numero entero no negativo para calcular su factorial!\n"
<<"Numero: ";
cin >> numero;
Factorial Factorial1(numero);
Factorial1.establecerFactorial();
cout <<"El factorial es: " <<Factorial1.obtenerFactorial() <<endl;
cin.get();
cin.get();
return 0;
}
Factorial.h
class Factorial
{
public:
Factorial(int);
//Funciones establecer
void establecerNumero(int);
void establecerFactorial();
//Funciones obtener
int obtenerFactorial();
private:
int numeroFactorial;
int resultado;
};
Factorial.cpp
#include <iostream>
using std::cout;
#include "Factorial.h"
Factorial::Factorial(int numero)
{
establecerNumero(numero);
}
//Funciones Establecer
void Factorial::establecerNumero(int numero)
{
if (numero > 0)
{
numeroFactorial= numero;
}
else
{
cout <<"\nEl numero ingresado no es correcto!\n";
}
}
void Factorial::establecerFactorial()
{
int numeroMultiplicador = numeroFactorial - 1;
while (numeroMultiplicador != 0)
{
resultado= (resultado + (numeroFactorial * numeroMultiplicador));
--numeroMultiplicador;
}
}
//Funciones Obtener
int Factorial::obtenerFactorial()
{
return resultado;
}
Desde ya gracias por cualquier ayuda :)
"Creo" que esto te arregla el desajuste:
void Factorial::establecerFactorial()
{
int numeroMultiplicador = numeroFactorial ;
resultado = 1 ;
while (numeroMultiplicador != 0)
{
resultado *= numeroMultiplicador ;
--numeroMultiplicador;
}
}
¡¡¡¡ Saluditos! ..... !!!!
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
Cita de: leosansan en 31 Julio 2014, 22:05 PM
"Creo" que esto te arregla el desajuste:
void Factorial::establecerFactorial()
{
int numeroMultiplicador = numeroFactorial ;
resultado = 1 ;
while (numeroMultiplicador != 0)
{
resultado *= numeroMultiplicador ;
--numeroMultiplicador;
}
}
¡¡¡¡ 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!
Si luego quieres subir un escalón... también lo puedes hacer con templates:
template< int N >
struct Factorial
{
enum { value = N * Factorial< N - 1 >::value };
};
template<>
struct Factorial< 0 >
{
enum { value = 1 };
};
int main( )
{
std::cout << "Factorial de 4: " << Factorial< 4 >::value << std::endl;
std::cout << "Factorial de 5: " << Factorial< 5 >::value << std::endl;
}