[Solucionado] Problema para sacar factorial de un entero

Iniciado por Mario Olivera, 31 Julio 2014, 21:10 PM

0 Miembros y 1 Visitante están viendo este tema.

Mario Olivera

 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 (cpp) [Seleccionar]
#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
Código (cpp) [Seleccionar]
class Factorial
{
public:
Factorial(int);
//Funciones establecer
void establecerNumero(int);
void establecerFactorial();
//Funciones obtener
int obtenerFactorial();

private:
int numeroFactorial;
int resultado;
};

Factorial.cpp
Código (cpp) [Seleccionar]
#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  :)

leosansan

"Creo" que esto te arregla el desajuste:

Código (cpp) [Seleccionar]
void Factorial::establecerFactorial()
{
int numeroMultiplicador = numeroFactorial ;
resultado = 1 ;

while (numeroMultiplicador != 0)
{
resultado  *=  numeroMultiplicador ;
--numeroMultiplicador;
}
}


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




Mario Olivera

Cita de: leosansan en 31 Julio 2014, 22:05 PM
"Creo" que esto te arregla el desajuste:

Código (cpp) [Seleccionar]
void Factorial::establecerFactorial()
{
int numeroMultiplicador = numeroFactorial ;
resultado = 1 ;

while (numeroMultiplicador != 0)
{
resultado  *=  numeroMultiplicador ;
--numeroMultiplicador;
}
}



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





Hola leosansan

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

Muchas Gracias por tu ayuda, Saludos!

eferion

Si luego quieres subir un escalón... también lo puedes hacer con templates:

Código (cpp) [Seleccionar]

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;
}