[ Foro de C# ]

Ejercicio 2.2.1.2.3 de curso C# de Nacho Cabanes

28-Apr-2015 02:23
Invitado (Lorianz)
2 Respuestas

Hola, estoy empezando el curso y me tilde en una parte. En este ejercicio (2.2.1.2.3), piden calcular la cantidad de digitos que tiene un numero entero positivo introducido por el usuario. "La pista que se nos da, es que se puede hacer varias veces dividiendo por 10". No me sale la logica. Probe creando 3 variables, una para la introduccion de datos, otra para el calculo de cifra, y otra para mostrar el resultado (estoy usando una variable de mas para mi).
el resultado es igual a 1 (int R=1;), porque si ingreso un valor como minimo va a tener 1 digito.
luego mi rasonamiento fue el de dividir el numero que ingresa el usuario en 10 y cree un if:

cifra = valorA/10
if ((cifra >= 1) && (cifra<=9))
R = R + 1;
else
 if ((cifra>=10) && (cifra>=99))
R = R + 2;
....
El codigo esta pesimo (ya se). No tiene sentido hacerlo asi, porque estoy usando los if y no tiene logica dividir por 10 si lo planeo resolver asi. Ademas que un numero "x" puede tener "x" infinito valor.
El problema esta cuando trato de plantearlo atravez de una ecuacion dividiendo por 10. Ya que la maquina no tiene concepto de unidad, decena,centena, etc...
Eso es todo, me gustaria tener otra pista para ver si lo puedo sacar. Se agradece cualquier aporte. Slds...


28-Apr-2015 11:18
Raúl Abascal (+4)

Necesitas una estructura que se repita un número indeterminado de veces y un "if" no está pensado para eso. A mi entender, lo más sencillo es dividir entre diez el número introducido mientras el resultado sea mayor que cero y llevar en un contador las veces que has dividido:

digitos = 0;
while (minumero > 0)
       digitos ++;
       minumero = minumero / 10;
wend

Cuando termine el proceso, en "digitos" tendrás el número de dígitos que tenía el introducido por el usuario.


03-May-2015 10:18
Invitado (Lorianz)

Muchas gracias, sabia que era algo mucho mas sensillo de lo que yo estaba planteando. Se que parece tonto, pero no se me ocurrio. Muchas gracias por la respuesta.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)