logo El diario de Pepe Molina (Caricatos)

yo

En los foros del web se ha planteado hacer nuevos desafíos entre los cuales, una de mis propuestas era obtener el número 100!. Pero el resultado debe ser de todos sus dígitos (no vale la notación científica).


Última caricatura

IV Asamblea de la AEC: IV Asamblea General de la Asociación Española de Caricaturistas

IV Asamblea de la AEC

RSS de las imágenes: rss


La Cita

La esperanza hace que agite el naufrago sus brazos en medio de las aguas, aún cuando no vea tierra por ningún lado

Ovidio, poeta latino (43 AC-17).


En esta zona están las páginas personales del autor.


Mis clientes ahora también son mis amigos (aunque les cobre).


En Mis amigos Informáticos hay una pequeña colección de páginas de colegas webmasters..


En Mis amigos artistas podemos encontrar artistas de cualquier índole (dibujantes, pintores, escritores...)


Las recomendaciones que proponemos son de índole variada.


Aquí un cajón de sastre de enlaces.


Nos referencian desde sitios de toda índole.


Puede contribuir a mantener esta página con su donativo.


botón pay-pal

Desafío javascript: 100!

emoticón de Caricatos Publicado el día 26 de septiembre de 2012
id=97; categorías: Vicisitudes de un Webmaster, Programación

En los foros del web se ha planteado hacer nuevos desafíos entre los cuales, una de mis propuestas era obtener el número 100!. Pero el resultado debe ser de todos sus dígitos (no vale la notación científica).

Al poco tiempo han puesto la solución trivial y evidente, aplicando la formula directamente:

(function f(i)	{
	return i > 1 ? i * f(i - 1) : 1;
})(100); // 9.33262154439441e+157

Pero como puede apreciarse el resultado se obtiene en un formato no admitido, así que con ayuda de otro lenguaje nos han dado el número que debería obtenerse:

93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

Exactamente el número que se obtiene con nuestro código (ver formulario adjunto).

|

Para obtener el resultado nos hemos basado en la técnica usada en un antiguo desafío: "Fibo(1000): códigos y comentarios." donde los resultados intermedios se han ido guardando en cadenas de texto.

A continuación ponemos el código que hemos usado:

function factorial(n)	{

	function revés(cadena)	{
	/*
		arreglo = cadena.split("");
		resultado = "";
		while (arreglo.length > 0) resultado += arreglo.pop();
		return resultado;
	*/
		return cadena.split("").reverse().join("");
	}

	function f(x){
		_resultado = "1";
		for (i = 2; i <= x; i++)	{
			_acumulado = "";
			_sumar = 0;
			for (j = 0; j < _resultado.length; j++)	{
				_digito = "0123456789".charAt(_resultado[j]) * i + _sumar;
				_resto = _digito % 10;
				_sumar = parseInt(_digito / 10);
				_acumulado += _resto.toString();
			}
			if (_sumar > 0) _acumulado += revés(_sumar.toString());
			_resultado = _acumulado;
		}
		return revés(_resultado);
	}
	if (n == 1)	return n
//	else	return n * factorial(n - 1);
	else	return f(n);
}

Puede notarse que nos hemos ayudado de dos funciones auxiliares donde evidentemente "f()" es la verdadera solución del problema; y se ayuda de otra que invierte las cadenas de texto.

Revés de una cadena

Para ir acumulando los valores intermedios hemos hecho una simple concatenación, pero debido a que al insertar valores al final de la misma, tuvimos que ingeniárnosla para invertir luego el resultado.

En el código que hemos llamado "revés", al no existir una primitiva para invertir los datos tipo String, nos hemos ayudado de algunas primitivas del tipo Array.


Veremos si el código propuesto puede ser mejorado...

Zona de comentarios

Este apunte aún no tiene comentarios.

Evaluación

Valoración de esta página: (apunte.97) valor

Valoración evaluar evaluar evaluar evaluar evaluar evaluar evaluar evaluar evaluar evaluar

Respuesta: Zona de mensajes (proceso de evaluación)

Historial de navegación

Esta página ha sido visitada en 29404 ocasiones


Disponemos de rss sindicar

Y del Mapa del sitio, además del sitemap.xml.


Aquí podemos encontrar los apuntes más visitados.

"Top 10" reemplaza a la sección Últimos apuntes.


Una buena forma de buscar un apunte es a partir de su categoría.


También es posible buscar apuntes por medio de las etiquetas (tags).


Hemos decidido poner al alcance de todos algunos comodines.

Adjuntamos una versión reducida del "buscador interno" que vemos en la lista anterior:

Buscar en apuntes

También estamos recopilando antiguas páginas del sitio.


Desde este recuadro se puede hacer una búsqueda cronológica.


Se puede crear una postal nueva desde el enlace del sector "Otras páginas del dominio", o editar la que sale en el recuadro, pulsando sobre ella..

http://www.pepemolina.com/postales/Fondos/santa.gif
http://www.pepemolina.com/postales/animales/gato8t.gif
Feliz Navidad
Feliz Navidad
enlace a la postal
Copyright © 2002-2024 www.pepemolina.com
RSS rss | Ver Mapa del sitio