[C con Clase] Contar los digitos de un numero

Toni tsptoni en gmail.com
Dom Nov 7 12:19:37 CET 2010


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
>



--
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20101107/a963cc3f/attachment.html>


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