elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Como calcular cuantos dígitos tiene un entero
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Como calcular cuantos dígitos tiene un entero  (Leído 7,121 veces)
Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Como calcular cuantos dígitos tiene un entero
« Respuesta #10 en: 4 Agosto 2014, 01:22 am »

Me explico con un simple ejemplo. Si queremos las cifras del resultado de 3 * 5 sin hacerlo podemos aplicar la propiedad de que el logaritmo de un producto es la suma de los logaritmos y, si estamos trabajando con enteros, el resultado sería:

Código
  1. digitos ( 3 * 5) =  log10 ( 3 * 5 ) = log10 (3) + log10 (5) + 1  = 0 + 0 + 1 = 1

Seguro que obtienes uno ?... el seguimiento que realizas al proceso es equivocado, la multiplicación de 3 * 5 es realizada previamente y el resultado es recibido por la función para calcular el logaritmo del mismo.

Código
  1. digitos ( 3 * 5 ) =  log10 ( 3 * 5 ) = log10 ( 15 ) =  1.17 + 1  = 2

Aprovecho la ocasión para exponer otra opción, pero esta vez usando la función estándar snprintf:

Código
  1. int digito = snprintf(NULL, 0, "%d", numero);

Saludos


« Última modificación: 4 Agosto 2014, 03:42 am por Blaster » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Como calcular cuantos dígitos tiene un entero
« Respuesta #11 en: 4 Agosto 2014, 04:03 am »

Seguro que obtienes uno ?... el seguimiento que realizas al proceso es equivocado, la multiplicación de 3 * 5 es realizada previamente y el resultado es recibido por la función para calcular el logaritmo del mismo.

Código
  1. digitos ( 3 * 5 ) =  log10 ( 3 * 5 ) = log10 ( 15 ) =  1.17 + 1  = 2


Creo que no has entendido mi exposición. Aclaro lo que decía.

En el caso de que en lugar de realizar la operación de 3 *5 apliques a la misma logaritmos, es decir :

Código
  1. log10 ( 3 *  5 ) = log10 (3) + log10 (5) = 0 + 0

es cuando se llegaría a un resultado incoherente si se trabaja con enteros en lugar de flotantes.

Para el caso del factorial que exponía, como no vamos a calcularlo directamente, haríamos:

Código
  1. log10(1500!) =  log10(1500) + log10(1499) +...+.log10(3) + log10(2)

Y si no tenemos en cuenta el trabajar con floats daría un resultado erróneo, toda vez  que en enteros  sería:

Código
  1. .....log10(8) + log10(9) = 0

Cuando en realidad deberían dar:

Código
  1. .....log10(8) + log10(9)= 1.85...==> 1

Y así sucesivamente.

Conste que era sólo una observación, no pretendía en ningún momento hacer crítica a tu comentario.  ;)


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








En línea

Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Como calcular cuantos dígitos tiene un entero
« Respuesta #12 en: 4 Agosto 2014, 04:59 am »

Creo que no has entendido mi exposición. Aclaro lo que decía.

Es verdad, debí leer mas detenidamente la explicación que diste

Saludos leosansan
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Como calcular cuantos dígitos tiene un entero
« Respuesta #13 en: 4 Agosto 2014, 06:39 am »


Aprovecho la ocasión para exponer otra opción, pero esta vez usando la función estándar snprintf:

Código
  1. int digito = snprintf(NULL, 0, "%d", numero);


El problema es que, a diferencia de los dos métodos anteriores, éste que propones da el número de los caracteres de la cadena "numero":

Código
  1. int digito = snprintf(NULL, 0, "%d", "123.314");

y si esta es "123.314" dará 7 mientras que si número se coloca directamente:

Código
  1. int digito = snprintf(NULL, 0, "%d", 123.314);

dará el resultado correcto, "creo", si es un entero e impredecible si es un decimal, aún poniendo %f.

Es verdad, debí leer mas detenidamente la explicación que diste

Me alegra que hallas captado lo que pretendía exponer y siento no haber sido tan claro la primera vez.  ;)

Un fuerte saludo Blaster.

En línea

Blaster

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: Como calcular cuantos dígitos tiene un entero
« Respuesta #14 en: 4 Agosto 2014, 15:05 pm »

El problema es que, a diferencia de los dos métodos anteriores, éste que propones da el número de los caracteres de la cadena "numero":

Código
  1. int digito = snprintf(NULL, 0, "%d", "123.314");

y si esta es "123.314" dará 7 mientras que si número se coloca directamente:

Código
  1. int digito = snprintf(NULL, 0, "%d", 123.314);

dará el resultado correcto, "creo", si es un entero e impredecible si es un decimal, aún poniendo %f.

La verdad no lo he probado con números decimales, pero con enteros predecibles si va bien, creo que con eso es suficiente para kutcher según la pregunta inicial

Saludos
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Como calcular cuantos dígitos tiene un entero
« Respuesta #15 en: 4 Agosto 2014, 17:22 pm »


¡Vamos a darle trabajo a eferion!.


El for no salió tan mal parado, pero ¿lo podemos mejorar?.

Pues se me ha ocurrido un sistema que reduce el número de divisiones a la mitad o a la mitad más uno, según que el número de cifras sea par o impar, con lo que los resultados del test que le pasaste al for tendrás que "actualizarlo" con el nuevo sistema:

Código
  1.  int digitos = 0 , num = 123456.345 ;
  2.  while ( num )
  3.    digitos = ( num /= 100 ) >= 0 ? digitos + 2 :  digitos + 1 ;



;) ;) Y sirve tanto para enteros como para decimales.  ;) ;)


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


« Última modificación: 4 Agosto 2014, 17:32 pm por leosansan » En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
necesito saber como ingresar 1 nº entero >0 y <=100 luego contar sus digitos.... « 1 2 »
Ejercicios
dpunisher03 18 17,118 Último mensaje 28 Mayo 2009, 08:24 am
por Eliptico
Como saber cuantos Km tiene de alcance una antena WiFi ?
Materiales y equipos
Dark Knight 4 25,427 Último mensaje 22 Octubre 2008, 23:21 pm
por Dark Knight
Cuantos años tiene su cerebro.? « 1 2 3 4 »
Foro Libre
Nirvanareus 35 17,574 Último mensaje 4 Diciembre 2010, 10:11 am
por flacc
cuantos años tiene eso web?
Foro Libre
ami89 4 3,696 Último mensaje 27 Junio 2010, 22:31 pm
por [Decoded]
Como cuento cuantos numeros tiene un archivo en (C)
Programación C/C++
andie13 3 2,978 Último mensaje 16 Noviembre 2016, 20:10 pm
por MRx86
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines