SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: omar_osiris en Lunes 28 de Mayo de 2007, 21:29

Título: Help Me Con Un Algoritmo
Publicado por: omar_osiris en Lunes 28 de Mayo de 2007, 21:29
Hola, no se si alguien podría ayudarme con este problema:

Dado un número n (1<=n<=10^7), obtener el número de dígitos que genera el factorial de n.

por ejemplo:

n = 10    n! = 3628800                                 resultado = 7
n = 20    n! = 2432902008176640000            resultado = 19

con un double es facil sacar hasta el factorial de 170, pero de ahí ya no se como sacar para el factorial de 10000000, además tiene que ser un algoritmo eficiente que no tarde más de 10 segundos, alguien tiene alguna sugerencia ?
Título: Re: Help Me Con Un Algoritmo
Publicado por: F_Tanori en Lunes 28 de Mayo de 2007, 21:48
¿Cual es el problema?

¿no sabes como sacarlo?

el factorial se saca facilmente con una funcion recursiva   :rolleyes:





Código: Text
  1.  
  2. funcion factorial (numero )
  3.  
  4.   si  numero &#60;= 1  entonces  return 1;
  5.   sino
  6.          return ( numero * factorial( numero - 1 ))
  7.    fin si
  8.  
  9. fin funcion
  10.  



Saludos
Título: Re: Help Me Con Un Algoritmo
Publicado por: lencho en Martes 29 de Mayo de 2007, 00:38
despues de calcular el factorial , realizas un conteo de los digitos que tiene tu variable.


BYTE.
Título: Re: Help Me Con Un Algoritmo
Publicado por: Mollense en Martes 29 de Mayo de 2007, 01:27
:P Ambos tienen razón pero no están leyendo bien el problema. El verdadero problema es que calcular el factorial de un número tal como 10000000 sería prácticamente "imposible" por lo tanto debería haber alguna forma de calcular la cantidad de dígitos del resultado sin calcular el factoriál en cuestión.

omar_osiris, yo también calculé hasta el 170, después de eso ya se produce un desbordamiento. Se me ocurre que podrías analizar la serie que se va formando a ver si encontrás algún patrón.
Título: Re: Help Me Con Un Algoritmo
Publicado por: su - en Martes 29 de Mayo de 2007, 01:46
Ya que ponen el caso...
Es posible crear una variable escalar en C?

Es decir, poner un numero muy grande, como de 16 digitos, pero como si fuera un dato (palabras escritas) y luego operar como si fuera una variable de digitos.
Título: Re: Help Me Con Un Algoritmo
Publicado por: pabloreda en Martes 29 de Mayo de 2007, 16:42
Tiene razon angel_K
yo buscaria algun tipo de aproximacion, sino es imposible

http://mathworld.wolfram.com/StirlingsApproximation.html (http://mathworld.wolfram.com/StirlingsApproximation.html)
Título: Re: Help Me Con Un Algoritmo
Publicado por: omar_osiris en Jueves 31 de Mayo de 2007, 11:59
Gracias  :lol:  me ha funcionado la propiedad de los logaritmos para resolver mi problema  :P