[C con Clase] Contar los digitos de un numero

Reignerok reignerok en gmail.com
Dom Nov 7 16:43:22 CET 2010


Seguramente la función logaritmo esté en la biblioteca cmath.

El 7 de noviembre de 2010 12:19, Toni <tsptoni en gmail.com> escribió:

> Muchas gracias a todos,
>
> Finalmente he resuelto el problema con todas vuestras sugerencias, una de
> ellas era efectivamente como apuntaba programante era el tipo, por ello lo
> cambie a long long int y luego reduciendo un poco el algoritmo un poco para
> aplicar algo más de matematicas simples. Intente usar el logaritmo pero no
> se si forma parte de alguna libreria o habia que implementarlo yo, de todas
> formas lo solucione con el siguiente codigo:
>
> int iesimo(long long int numero){
>
> int contador=0;
>   while(numero!=0){
>     contador++;
>     numero/=10;
>   }
> return contador;
> }
>
> De nuevo gracias a todos,
>
> Saludos,
>
>
>
> El 7 de noviembre de 2010 02:33, Steven Davidson <srd4121 en njit.edu>escribió:
>
> Hola Toni,
>>
>> On 11/6/10, Toni <tsptoni en gmail.com> wrote:
>> > Hola,
>> >
>>
>> [CORTE]
>>
>> > Lo que quiero que haga ese programa es en primer lugar, al insertar un
>> > numero cualquiera me diga cuantos digitos componen ese numero, por
>> ejemplo
>> > 35435 son 5 digitos.
>> > El problema que tengo es que cuando introduzco un numero de 9 o más
>> digitos,
>> > el resultado que me devuelve es erroneo.
>> >
>> > Una vez sepa los digitos que tiene, tengo que sumar las posiciones
>> > simetricas, (el primero con el ultimo, el segundo con penultimo) aunque
>> para
>> > esto ya haré su implementación, pero primero necesitaria el resultado
>> > correcto de los digitos que forman ese numero.
>> >
>>
>> La solución más sencilla es usando las matemáticas. Un número tiene
>> tantos dígitos como el mayor exponente de la base de la representación
>> de susodicho número más 1. Si es base 10, entonces el número tiene
>> tantos dígitos como uno más el mayor exponente de 10; por ejemplo,
>>
>> 35435 = 30000 + 5000 + 400 + 30 + 5 = 3x10^4 + 5x10^3 + 4x10^2 + 3x10^1 +
>> 5x10^0
>>
>> El mayor exponente es 4, por lo que la cantidad de dígitos es: 1+4 = 5.
>>
>> Como estamos manipulando exponentes de la base numérica, entonces
>> estamos hablando de logaritmos. La solución a tu problema es
>> simplemente:
>>
>> int iesimo( long long int num )  // dígitos = 1 + log(num)
>> {
>>  return 1+int(log10(num));
>> }
>>
>>
>> Espero que esto te sirva.
>>
>> Steven
>>
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.net
>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>>
>
>
>
> --
>
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20101107/bbd8dd78/attachment.html>


Más información sobre la lista de distribución Cconclase