Contar las cifras de un número entero en Java

Programa Java que pide un número entero por teclado y calcula y muestra el número de cifras que tiene.

Por ejemplo si se introduce el número 54391 el programa mostrará el mensaje:

El número tiene 5 cifras

Si se introduce el número 101 se mostrará el mensaje:

El número tiene 3 cifras

El proceso leer un número y contar sus cifras se repetirá hasta que se conteste ‘N’ a la pregunta Continuar? (S/N)
Si se responde 'S' se volverá a pedir otro número. 

Para saber cuántas cifras tiene un número entero haremos lo siguiente:

Dividiremos el número sucesivamente entre 10. En cada división tomaremos la parte entera y volvemos a dividir. Este proceso se repite hasta que se obtenga un cero como cociente en la división.

Por ejemplo, si el número leído es 1234 haremos las siguientes operaciones:

1234 / 10 = 123
123 / 10 = 12
12 / 10 = 1
1 / 10 = 0

hemos realizado 4 divisiones hasta obtener un cero como cociente, por lo tanto el número tiene 4 cifras.

// Programa Java que calcula el número de cifras que tiene un número entero
import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException{
        Scanner sc = new Scanner(System.in);
        int n, cifras;
        char car;
        do{
            System.out.print("Introduce un número entero: ");
            n = sc.nextInt();
            cifras= 0;    //esta variable es el contador de cifras
            while(n!=0){             //mientras a n le queden cifras
                    n = n/10;         //le quitamos el último dígito
                   cifras++;          //sumamos 1 al contador de cifras
            }
            System.out.println("El número tiene " + cifras+ " cifras");
            System.out.print("Continuar? ");
            car = (char)System.in.read();
        }while(car!='n' && car != 'N');   
    }
}


36 comentarios:

  1. Hola. Cómo se haría para que en la pregunta de "Continuar?", si la persona escribe un carácter distinto de "n", "N", "s" o "S", por ejemplo una "d", el programa diga: "Carácter inválido." y se vuelva a repetir la pregunta de "Continuar?".

    He estado probando con "if", "do-while", pero no me sale, y no se me ocurre cómo hacero.

    ResponderEliminar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
    2. public static void main(String[] args) throws IOException
      {
      Scanner sc = new Scanner(System.in);
      int numero, digitos;
      char respuesta;
      do
      {
      System.out.print("Escribe un número entero ");
      numero= sc.nextInt();
      digitos=0;
      while (numero!=0)
      {
      numero=numero/10;
      digitos++;
      }
      System.out.println("El número tiene " + digitos + " digitos");
      do
      {
      System.out.print("Desea continuar? S/N ");
      respuesta = (char)System.in.read();
      System.in.read();//omitir el enter que quedó en memoria
      }while (respuesta!='s' && respuesta!='S' && respuesta !='n' && respuesta!='N');

      }while (respuesta=='s' | respuesta=='S');
      }

      Eliminar
    3. . Leer un número entero de tres dígitos y determinar si el primer dígito es igual
      al último. ayedenme con este ejercicio en java por favor es urgente

      Eliminar
  2. solo es cuestion evaluar el caracter ingresado con un if y colocarlo debajo de esta linea.
    car = (char)System.in.read();

    ResponderEliminar
    Respuestas
    1. me puedes ayudar con este ejercicio porfa 1. Elabore un método sin parámetro que devuelva la cantidad de cifras de un número natural que se ingresara por teclado.

      Eliminar
  3. me gusto el ejercicio, así que hice unas modificaciones y me planteé un reto mayor: "ingresar un numero y obtener su espejo, es decir, imprimirlo al revés: ejemplo. ingreso 1234, y debe salir 4321. Deben haber varias formas de hacerlo, pero tal cual como lo hice me corrió a la primera...

    import java.io.*;
    public class espejo2 {

    public static void main(String[] args)throws IOException {

    BufferedReader en=new BufferedReader (new InputStreamReader (System.in));

    int num,cont,invnum,i,pot,gnum;
    int sumainv;
    System.out.flush();
    System.out.print("introduzca un numero=");
    num=Integer.parseInt(en.readLine());
    //inicializando
    cont=0;
    i=0;
    pot=1;
    sumainv=1;

    gnum=num;
    do { //ciclo para contar un numero

    num=num/10;


    cont+=1;
    } while(num!=0);


    for(i=0;i<(cont-1);i++){ // ciclo para hallar la potencia

    pot=pot*10;
    }

    invnum=(gnum/pot);

    do {

    invnum=(gnum%10)*pot;

    sumainv= invnum+sumainv; //inicializar y declarar
    pot=pot/10;

    gnum=gnum/10;



    }while(pot>1);


    System.out.println("el numero esta formado por="+cont+ " "+"digitos");


    System.out.print("el numero al revés es:"+sumainv);
    }
    }
    ---------------------------------------------------------------------
    introduzca un numero=12789456
    el numero esta formado por=8 digitos
    el numero al revés es:65498721
    Process completed.

    ResponderEliminar
    Respuestas
    1. Muy bueno el aporte., Como dices hay varias formas de hacerlo y de hecho hay una forma que es bastante sencilla sin necesidad de saber las cifras del número. La idea es la siguiente:
      N = 1234
      obtenemos el 4 y nos quedamos con N = 123
      obtenemos el 3 y se lo sumamos a 4 * 10 => 40 + 3 = 43 ahora N = 12
      obtenemos el 2 y se lo sumamos al 43 * 10 => 430 + 2 = 432 ahora N = 1
      obtenemos el 1 y se lo sumamos al 432*10 => 4320 + 1 = 4321
      Alguien se anima a codificarlo??

      Eliminar
    2. lo hice como dices... pero tiene la limitante que de esa forma "solo sirve para 4 números" de la forma anterior puede ser para un número mayor. Solo deber declarar las variables de acuerdo al número de dígitos que deseas...


      import java.io.*;
      public class espejo2 {

      public static void main (String[] args)throws IOException {

      BufferedReader en=new BufferedReader (new InputStreamReader (System.in));

      // declaracion
      int num,b,c,d,e,f;

      System.out.flush();
      System.out.print("introduzca un un valor");
      num=Integer.parseInt(en.readLine());


      b=num%10;
      num=num/10;
      b=b*10;
      c=num%10;
      b=(b+c)*10;
      num=num/10;
      d=num%10;
      b=(b+d)*10;
      num=num/10;
      e=num%10;
      b=b+e;

      System.out.println("el número al revés es:"+" "+b);

      }}
      ----------------------------------------------------------------------------------------------

      introduzca un un valor1234
      el número al revés es: 4321

      Process completed.

      Eliminar
    3. y sirve unica y exclusivamente con 4 digitos... a menos que haya entendido mal... es mejor contar el número. Así, se puede voltear cualquier cantidad de dígitos, solo hay que tener el cuenta como lo declaramos...

      Eliminar
    4. Hola Douglas, el ejemplo de 4 dígitos es eso, un ejemplo de cómo sería el proceso con un número de 4 digitos. Pero se debe servir para cualquier núnero de dígitos. El programa debe contener un while y en cada iteración el número N se divide entre 10 par quitarle la última cifra. El programa sería este:
      public static void main(String[] args) {
      int N , espejo= 0;
      Scanner sc = new Scanner(System.in);
      System.out.println("Introduce un númeor entero: ");
      N = sc.nextInt();
      while (N!=0){
      //obtener la última cifra de N y añadirla a espejo
      //quitar la última cifra de N
      }
      System.out.println(espejo);
      }

      Dime si lo has conseguido ok?

      Eliminar
  4. quiero creer que acá buscan inventar de nuevo la rueda como ejercicio mental...

    si no:
    Scanner scn = new Scanner(System.in);

    System.out.println("número: ");
    int numero = scn.nextInt();

    System.out.println("largo: " + String.valueOf(numero).length());
    System.out.println("reverso: " + new StringBuffer(String.valueOf(numero)).reverse());

    ResponderEliminar
    Respuestas
    1. Tienes un pequeño error, en lugar de pedir un número entero por teclado has de pedir un String, ya que si el usuario introduce un número con CEROS a la izquierda no lo permitirá.
      Scanner scn = new Scanner(System.in);

      System.out.println("número: ");
      String numero = scn.nextLine();

      System.out.println("largo: " + String.valueOf(numero).length());
      System.out.println("reverso: " + new StringBuffer(String.valueOf(numero)).reverse());

      Salu2

      Eliminar
  5. Pues yo lo he copiado tal cual, introduzco un numero cualquiera (5 digitos) y al darle a "repetir proceso" y que me vuelva a pedir otro numero (esta vez 4 dígitos) lo que el programa hace es sumar los digitos de la vez anterior con los de esta, es decir, 9 digitos.

    ResponderEliminar
  6. como saco mediante un método, determinar la cantidad de dígitos pares que tiene el valor ingresado? por favor respondan

    ResponderEliminar
  7. NECESITO CON URGENCIA!! programa en Java que lea un numero ejemplo 342 …. El programa debe decir si el digito 3 está en el número leído.

    ResponderEliminar
  8. Quien me ayuda con este

    Escribir un programa en JavaScript que lea un número entero e imprimirlo al revés

    ResponderEliminar
  9. Quien me ayuda con este

    Escribir un programa en JavaScript que lea un número entero e imprimirlo al revés

    ResponderEliminar
  10. Quien me ayuda con este

    Escribir un programa en JavaScript que lea un número entero e imprimirlo al revés

    ResponderEliminar
  11. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  12. Necesito ayuda con un algoritmo que me indique cuantos dígitos contiene

    ResponderEliminar
  13. Hola,
    soy programador de C asi que la orden java no la sé pero para obtener el número de dígitos no sería mas fácil
    ndigitos = log(n) + 1;

    Siendo log el logaritmo en base 10.

    ResponderEliminar
    Respuestas
    1. Hola, es cierto que usando el logaritmo base 10 podemos obtener el número de cifras de una forma mucho más sencilla. En Java el logaritmo en base 10 de n se obtiene con el método log10 de la clase Math. Las instrucciones serían:

      Scanner sc = new Scanner(System.in);
      long n;
      System.out.print("Introduce un número entero: ");
      n = sc.nextLong();
      System.out.println("El número tiene " + (int)(Math.log10(n)+1) + " cifras");

      Este tipo de ejercicios se plantea a los estudiantes de Java o de programación en general como aplicación de los bucles while, do .. while, etc y por eso se ha resuelto de esa forma.
      Gracias por el aporte. Saludos xd

      Eliminar
  14. Buenas tengo una duda.
    Tengo q hacer un programa. En java .
    Dice
    Digital un número positivo y dividirlo en 5 dígitos donde el primero y tercer número se eleve a el cubo
    Esperó q me puedan ayudar....

    ResponderEliminar
  15. Buenas tengo una duda.
    Tengo q hacer un programa. En java .
    Dice
    Digital un número positivo y dividirlo en 5 dígitos donde el primero y tercer número se eleve a el cubo
    Esperó q me puedan ayudar....

    ResponderEliminar
  16. hola alguien me podría decir como desarrollar un código que solo lea el 0 y 1 para que me verifique una condición de si están en pares de 3 ejemplo 111000 y si esta correcto solo diga que si esta correcto esque se me complica la programación :C

    ResponderEliminar
  17. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  18. public static void main (String[] args)throws IOException
    {
    BufferedReader tecla=new BufferedReader(new InputStreamReader(System.in));
    int N, CC=0, C=1;
    System.out.println(" CONTAR CIFRAS");
    System.out.println(" ------ ------");
    System.out.print(" NUMERO : ");
    N = Integer.parseInt(tecla.readLine());
    while (N >= C)
    {
    C = C * 10;
    CC = CC + 1;
    }
    System.out.println(" CIFRAS : " + CC );
    }
    }

    ResponderEliminar
    Respuestas
    1. no entendi muy bien

      Eliminar
    2. hola necesito saber como pedir 6 numeros con for que reconosca los numeros de 3 digitos y les saque el promedio

      Eliminar
    3. hoaq alguien me dice que cantidad es esta en letras 523000900120987

      Eliminar
  19. necesito un programa que me diga cuantas cifras fracionarias tiene un numero cualquiera ingresado por el usuario

    ResponderEliminar
  20. necesito un programa que me diga cuantas cifras fracionarias tiene un numero cualquiera ingresado por el usuario

    ResponderEliminar
  21. este creo que es mas comodo

    public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    String n;

    System.out.println("INGRESE UNA CIFRA");
    n=sc.nextLine();
    System.out.println("tiene "+n.length()+" cifras");

    ResponderEliminar
  22. Dado un número de máximo 6 posiciones determinar la suma de sus dígitos. alguien sabe?

    ResponderEliminar