• Domingo 28 de Abril de 2024, 21:54

Autor Tema:  Help Me Con Un Algoritmo  (Leído 2856 veces)

omar_osiris

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Help Me Con Un Algoritmo
« en: Lunes 28 de Mayo de 2007, 21:29 »
0
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 ?

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Help Me Con Un Algoritmo
« Respuesta #1 en: Lunes 28 de Mayo de 2007, 21:48 »
0
¿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
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

lencho

  • Miembro de PLATA
  • *****
  • Mensajes: 1076
    • Ver Perfil
Re: Help Me Con Un Algoritmo
« Respuesta #2 en: Martes 29 de Mayo de 2007, 00:38 »
0
despues de calcular el factorial , realizas un conteo de los digitos que tiene tu variable.


BYTE.
______________________________________________________________________________________
"No estoy de acuerdo con lo que dices, pero defenderé con mi vida tu derecho a expresarlo"

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Help Me Con Un Algoritmo
« Respuesta #3 en: Martes 29 de Mayo de 2007, 01:27 »
0
: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.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Help Me Con Un Algoritmo
« Respuesta #4 en: Martes 29 de Mayo de 2007, 01:46 »
0
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.
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

pabloreda

  • Miembro MUY activo
  • ***
  • Mensajes: 125
    • Ver Perfil
    • http://www.reda4.org
Re: Help Me Con Un Algoritmo
« Respuesta #5 en: Martes 29 de Mayo de 2007, 16:42 »
0
Tiene razon angel_K
yo buscaria algun tipo de aproximacion, sino es imposible

http://mathworld.wolfram.com/StirlingsApproximation.html

omar_osiris

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Help Me Con Un Algoritmo
« Respuesta #6 en: Jueves 31 de Mayo de 2007, 11:59 »
0
Gracias  :lol:  me ha funcionado la propiedad de los logaritmos para resolver mi problema  :P