[C con Clase] Contar los digitos de un numero

Steven Davidson srd4121 en njit.edu
Dom Nov 7 02:33:08 CET 2010


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




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