Calcular la cifra mayor de un número y su posición

Cifra mayor de un número versión 1

Programa que calcule la cifra mayor de un número y la posición que ocupa. Se considera la posición 1 la de más a la derecha. Si la cifra mayor se repite varias veces en el número se indicará la posición de la que se encuentre más a la izquierda.

Por ejemplo, si leemos el número N = 49982 

el programa mostrará:

Cifra mayor: 9 Posición: 4

Solución:

Para resolverlo utilizaremos una variable mayor que contendrá la cifra mayor del número y una variable posicionMayor que contendrá en qué posición dentro del número se encuentra la cifra mayor.

La idea es obtener cada una de las cifras del número comenzando por la de más a la derecha y para cada cifra compararla con la mayor actual y si es el caso tomarla como nueva cifra mayor. También tendremos una variable posicion que iremos incrementando cada vez que obtengamos una nueva cifra del número. Esta variable indica la posición que ocupa la cifra dentro del número. El valor de posicion se guarda en posicionMayor cada vez que encontremos una cifra mayor que la mayor actual.

Ejemplo:

Los valores iniciales de mayor, posicionMayor y posicion es cero.

mayor = 0

posicionMayor = 0

posicion = 0

Si N = 49982

Obtenemos el 2:

49982 % 10 -> 2

posicion++ -> posicion = 1

si la cifra obtenida es mayor o igual que la cifra mayor actual la tomamos como nueva cifra mayor y guardamos su posición:

2 >= 0 -> cierto entonces: mayor = 2  posicionMayor = 1

Comprobamos si es mayor o igual porque el ejercicio indica que si la cifra mayor se repite debemos tomar como mayor la que se encuentre más a la izquierda, o lo que es lo mismo, la última que encontremos en el número ya que hemos empezado a obtener cifras por la derecha. Si solo comparamos si la cifra es mayor (sin comparar si es igual) nos quedaríamos en ese caso con la primera que encontremos.

Quitamos el 2 al número y repetimos el proceso.

49982 / 10 -> 4998

Obtenemos el 8:

4998 % 10 -> 8

posicion++ -> posicion = 2

si la cifra obtenida es mayor o igual que la mayor actual la tomamos como nueva cifra mayor y guardamos su posición:

8 >= 2 -> cierto entonces: mayor = 8  posicionMayor = 2

Quitamos el 8 al número y repetimos el proceso.

4998 / 10 -> 499

Obtenemos el 9:

499 % 10 -> 9

posicion++ -> posicion = 3

si la cifra obtenida es mayor o igual que la mayor actual la tomamos como nueva cifra mayor y guardamos su posición:

9 >= 8 -> cierto entonces: mayor = 9  posicionMayor = 3

Quitamos el 9 al número y repetimos el proceso.

499 / 10 -> 49

Obtenemos el 9:

49 % 10 -> 9

posicion++ -> posicion = 4

si la cifra obtenida es mayor o igual que la mayor actual la tomamos como nueva cifra mayor y guardamos su posición:

9 >= 9 -> cierto entonces: mayor = 9  posicionMayor = 4

Quitamos el 9 al número y repetimos el proceso.

49 / 10 -> 4

Obtenemos el 4:

4 % 10 -> 4

posicion++ -> posicion = 5

si la cifra obtenida es mayor o igual que la mayor actual la tomamos como nueva cifra mayor y guardamos su posición:

4 >= 9 -> falso 

Quitamos el 4.

4 / 10 -> 0

Cuando al dividir entre 10 obtenemos un cero significa que el número ya no tiene más cifras y el proceso termina.


/*
 * Programa que pida por teclado un número N entero positivo 
 * y muestre la cifra mayor del número y qué posición ocupa. 
 * Se considerará la posición 1 la de más a la derecha. 
 * Si la cifra mayor se repite se indicará la posición de la que se encuentre 
 * más a la izquierda (la última que hemos encontrado) 
 */

import java.util.Scanner;

public class MayorCifraDeNumero {

    public static void main(String[] args) {

        int num, posicionMayor, cifra, mayor, posicion;
        Scanner sc = new Scanner(System.in);
        
        do {
            System.out.print("Introduce numero entero >0: ");
            num = sc.nextInt();
        } while (num <= 0);

        mayor = 0; //Esta variable contendrá el valor de la cifra mayor. 
                   //Inicialmente le damos el valor 0 que es el menor valor de cualquier cifra del número.    

        posicionMayor = 0; //variable que contendrá la posición donde se encuentra la cifra mayor del número
        posicion = 0; //variable que contendrá la posición de la cifra con la que estamos trabajando 
            
        while (num != 0) {
               posicion++;
               cifra = num % 10;        //obtenemos la cifra de la derecha del número
               if (cifra >= mayor) {    //si es mayor o igual que la mayor actual 
                   mayor = cifra;       // la tomamos como nueva mayor
                   posicionMayor = posicion; //y guardamos su posición
               }
               num = num / 10; //le quitamos al número su última cifra de la derecha. 
        }                      //Se repite el proceso mientras al número le queden cifras (num!=0)               
            
        System.out.print("Cifra mayor: " + mayor); //mostramos la cifra mayor del número
            
        System.out.println(" Posición: " + posicionMayor); //mostramos la posición de la cifra mayor
    }
}

No hay comentarios:

Publicar un comentario