Saltar al contenido

Encontrar el número de dígitos de un número entero

Luego de tanto trabajar ya hallamos la contestación de este contratiempo que tantos lectores de nuestra web tienen. Si tienes algún detalle que aportar puedes dejar tu comentario.

Solución:

Siempre existe este método:

n = 1;
if ( i >= 100000000 )  n += 8; i /= 100000000; 
if ( i >= 10000     )  n += 4; i /= 10000; 
if ( i >= 100       )  n += 2; i /= 100; 
if ( i >= 10        )  n += 1; 

Bueno, la respuesta correcta sería medirlo, pero debería poder adivinar la cantidad de pasos de CPU involucrados en la conversión de cadenas y revisarlos en busca de un marcador final.

Luego piense cuántas operaciones FPU puede hacer su procesador y qué fácil es calcular un solo registro.

editar: perder más tiempo un lunes por la mañana 🙂

String s = new Integer(t).toString(); 
int len = s.length();

Uno de los problemas con los lenguajes de alto nivel es adivinar cuánto trabajo está haciendo el sistema detrás de escena de una declaración aparentemente simple. Enlace obligatorio de Joel

Esta instrucción implica la asignación de memoria para un stringy posiblemente un par de copias temporales de un string. Debe analizar el entero y copiar sus dígitos en un string, posiblemente teniendo que reasignar y mover la memoria existente si el número es grande. Es posible que tenga que verificar un montón de configuraciones locales para decidir si su país usa “,” o “.”, es posible que tenga que hacer un montón de conversiones Unicode.
Luego, encontrar la longitud tiene que escanear todo stringnuevamente considerando Unicode y cualquier configuración local específica como: ¿está en un idioma de derecha-> izquierda?

Alternativamente:

digits = floor( log10( number ) ) + 1;

¡El hecho de que esto sea más difícil para ti en papel no significa que sea difícil para una computadora! De hecho, una buena regla en la informática de alto rendimiento parece haber sido: si algo es difícil para un ser humano (dinámica de fluidos, representación 3D), es fácil para una computadora, y si es fácil para un ser humano (reconocimiento facial, detección de una voz en un habitación ruidosa) ¡es difícil para una computadora!

En general, puede suponer que las funciones matemáticas integradas log/sen/cos, etc., han sido una parte importante del diseño de computadoras durante 50 años. Entonces, incluso si no se asignan directamente a una función de hardware en la FPU, puede apostar a que la implementación alternativa es bastante eficiente.

No lo sé, y la respuesta puede ser diferente dependiendo de cómo se implemente su idioma individual.

Entonces, ¡haz una prueba de estrés! Implemente las tres soluciones. Ejecútelos del 1 al 1.000.000 (o algún otro gran conjunto de números que sea representativo de los números con los que se comparará la solución) y mida el tiempo que tarda cada uno de ellos.

Enfrente sus soluciones entre sí y déjelas pelear. Como gladiadores intelectuales. ¡Entran tres algoritmos! ¡Se va un algoritmo!

Te invitamos a añadir valor a nuestro contenido tributando tu veteranía en las interpretaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *