Tengo una duda de como determinar los digitos de un número

Iniciado por Felipe_Henriquez, 17 Agosto 2011, 00:40 AM

0 Miembros y 1 Visitante están viendo este tema.

Felipe_Henriquez

Buenas a los que leen este post, y como dice el asunto del post. Tengo una duda con respecto a como determinar una cantidad x de dígitos de cualquier numero, no sé como hacer un programa que lea los dígitos de cualquier número.

Ejemplo supongamos que escribo en el programa el numero 11231415 y que me diga cuantos dígitos tiene, pasa que estudiando el libro de programación (C/C++ Java Deitel y Deitel) , salen muchos ejercicios de esa forma. Sin ir mas allá tengo un problema de transformar números binarios a decimales, lo podría hacer perfectamente, si el enunciado del problema digiera un número de 6 dígitos o un número de dígitos estándar, pero pasa que el enunciado del problema es para un número de cualquier longitud, no sé si me explico bien.

Voy en el capítulo 3 y hasta el momento tengo las siguientes herramientas, o lo visto en el libro hasta ahora, if else, y bucle while, sólo puedo usar esas dos herramientas. Sí me pudieran explicar como contar los dígitos de un número cualquiera introducido, estaría muy agradecido.

PD: He buscado en google pero no aparece como determinar los dígitos de un número cualquiera solo con estas dos herramientas  y es lo qué se me pide en el libro y no sé como hacerlo.

Un cordial Saludo Gracias.


Alien-Z

#2
Me interesa bastante el problema que has planteado para practicar, intentaré resolverlo y si lo consigo lo posteo; asi que si no lo he entendido mal quieres leer la cantidad de números que introduce el usuario usando solo "if else" y "while".

Saludos.

Felipe_Henriquez

ハセヲ Muchas gracias por darme el link satisface en cierta manera el problema, pero aun no llegaba a funciones oficialmente en el libro si que ni idea tenia de esta función.

Allen-Z quería saber como saber los dígitos longitud de caracteres de un número cualquiera solo con if else, while, por ejemplo si introduzco 40.000 me diga 5 dígitos, o introducir 12.000.000 y me diga 8 dígitos y nada de arreglos ni punteros ni funciones extras solo con <stdio.h> . Sólo con esas cosas, pero  if else, while, <stdio.h> por lo que me parece es muy difícil.
Gracias Allen-Z por darte la molestia de contestar e intentar realizar el ejercicio.
Un Abrazo! Saludos!

тαптяα

#4
Cita de: Felipe_Henriquez en 17 Agosto 2011, 01:10 AM
ハセヲ Muchas gracias por darme el link satisface en cierta manera el problema, pero aun no llegaba a funciones oficialmente en el libro si que ni idea tenia de esta función.

Allen-Z quería saber como saber los dígitos longitud de caracteres de un número cualquiera solo con if else, while, por ejemplo si introduzco 40.000 me diga 5 dígitos, o introducir 12.000.000 y me diga 8 dígitos y nada de arreglos ni punteros ni funciones extras solo con <stdio.h> . Sólo con esas cosas, pero  if else, while, <stdio.h> por lo que me parece es muy difícil.
Gracias Allen-Z por darte la molestia de contestar e intentar realizar el ejercicio.
Un Abrazo! Saludos!
De nada.

Alien-Z

#5
CitarNo creo que con solo ciclos sin nada de funciones, puedas determinar la longitud de la cadena.

Por lo que ha comentado es un problema que le plantea un libro, asi que lo más seguro es que tenga solución.

CitarAllen-Z quería saber como saber los dígitos longitud de caracteres de un número cualquiera solo con if else, while, por ejemplo si introduzco 40.000 me diga 5 dígitos, o introducir 12.000.000 y me diga 8 dígitos y nada de arreglos ni punteros ni funciones extras solo con <stdio.h> . Sólo con esas cosas, pero  if else, while, <stdio.h> por lo que me parece es muy difícil.
Gracias Allen-Z por darte la molestia de contestar e intentar realizar el ejercicio.
Un Abrazo! Saludos!

No es molestia para nada, yo también entré en el mundo de la programación hace poco y me interesa bastante intentar resolverlo para poner en práctica lo que he aprendido (aunque yo voy terminando con las clases y los objetos). Lo que hace complicado el problema es que no hay una cifra máxima, igual puede tener un dígito que 20, y tan solo puedes usar "if else" y "while", asi que si consigo darle solución lo comento.

Saludos!

Felipe_Henriquez

Gracias por responder Allen :D si fuera un numero determinado de dígitos no tengo problemas en hacerlo pero con no se sabe de cuantos dígitos introduce el usuario ahí esta el pero Gracias por el esfuerzo

Saludo!

criskapunk

#7
Si lo que querés es convertir un número de decimal a binario no hace falta saber la cantidad de dígitos, porque el mecanismo es siempre el mismo :P

Por ejemplo, tomamos el número 133.
Hay que ir haciendo divisiones enteras sucesivas por 2 y guardar el resto. Entonces:

133/2 = 66 Resto 1
66/2   = 33 Resto 0
33/2   = 16 Resto 1
16/2   = 8 Resto 0
8/2     = 4 Resto 0
4/2     = 2 Resto 0
2/2     = 1 Resto 0
1/2     = 0 Resto 1

Fijate el último caso. Tenés que ir haciendo la división hasta que la división entre un número y 2 sea cero. Ese va a ser el último resto que tenés que guardar (Esa sería la condición de corte de un bucle while, por ejemplo).

Ahora sólo queda leer el número de abajo hacia arriba, quedando 10000101 = 133.

Te toca traducirlo a C.

Igualmente estoy tratando de resolver lo de obtener la cantidad de dígitos de un número sin usar funciones. Esta bueno el problema ;D

Un saludo.

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

:¬¬

bigfu

Si lo que quieres es saber el número de dígitos que tiene un número cualquiera, lo único que tienes que hacer es ir dividiendo por 10 y contar las divisiones hasta que el cociente de 0.

Ejemplo: Num = 121, contador = 0

121/10 = 12 --> contador = 1
12/10 = 1 --> contador = 2
1/10 = 0 --> contador = 3
y ahi finaliza el bucle
A reader lives a thousand lives before he dies. The man who never reads lives only one

Valkyr

También podrías hacer algo así:


#include<stdio.h>
#include<ctype.h>

int main(void){
int a, digitos;
digitos = 0;
a = getchar();
while(isdigit((char)a)){
digitos++;
a = getchar();
}
printf("%d", digitos);
return 0;
}


aunque como dices que no puedes hacer uso de funciones pues podrías hacer también algo así:


#include<stdio.h>

int main(void){
int a, digitos;
digitos = 0;
a = getchar();
while((char)a != '\n'){
digitos++;
a = getchar();
}
printf("%d digitos", digitos);
}


pero tendrías que comprobar dentro del bucle While que lo que has leido es un número, si no se colaría xD.

Saludos.