Suma de dígitos en Java



Objetivos

  • Manejo de cadenas
  • Bucles o iteraciones
  • Manejo de funciones


Enunciado del problema

Se trata de implementar un programa que sume los dígitos de un número entero no negativo. Por ejemplo, la suma de los dígitos del 3433 es 13.

Para darle un poco más de emoción, el programa no se limitará a escribir el resultado de la suma, sino que también escribirá todos los sumandos utilizados: 3 + 4 + 3 + 3 = 13.

Entrada

La entrada consta de una serie de casos de prueba terminados con un número negativo. Cada caso de prueba es una simple línea con un número no negativo no mayor que 10^9 del que habrá que sumar todos sus dígitos.

Salida

Para cada caso de prueba se mostrará una línea en la que aparecerán cada uno de los dígitos separados por el signo +, tras lo cual aparecerá el símbolo = y la suma de todos los dígitos.

Ten en cuenta que antes y después de cada símbolo (+ y =) hay un espacio.

Análisis

Repasando rápidamente lo que nos piden tenemos que:

  • La condición de parada para dejar de recibir números es que la entrada sea -1
  • El número introducido deber ser positivo y menor que 10^9. En nuestro caso si no se cumple alguna de las condiciones simplemente vamos a ignorar el número.

Solución


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import java.util.Scanner;
import java.util.ArrayList;


public class SumaDigitos {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
   
        //variable ArrayList para almacenar los numeros de entrada
        ArrayList<String> numeros;
        numeros = new ArrayList<>();
        
        //leemos la entrada de datos
        Scanner scanner = new Scanner(System.in);
        
        //almacenamos el valor en la variable numero
        String numero = scanner.next();
                 
        //mientras el número sea distinto de -1 continuar recibiendo
        while (! numero.equals("-1")) {  
            
            //añadimos el numero a la lista
            numeros.add(numero);
            
            //leemos la entrada de datos nuevamente
             numero = scanner.next();
        }
        
       
        //ahora recorremos la lista de números y mostramos los resultados
        for (int i = 0; i < numeros.size(); i++) {
            sumaDeNumero(numeros.get(i));
        }     
        
        
    }
    
    

    //funcion que suma los dígitos e imprime el resultado
    //si el numero es positivo y menor a 10^9 lo procesamos
    //si no lo ignoramos
    private static void sumaDeNumero(String numero) {
        
        if(Integer.parseInt(numero) > 0 && 
           Integer.parseInt(numero) < Math.pow(10, 9)){
        
        //variable para almacenar la suma de los digitos de cada numero
        int suma = 0;
        
        //variable para almacenar el resultado como una cadena 
        //que incluye los simbolos = +
        String resultado = "";
        
        //recorremos los digitos del numero
        for (int i = 0; i < numero.length(); i++) {
            
            //vamos sumando los digitos
            suma += Character.getNumericValue(numero.charAt(i));
            
            //vamos formando la cadena de resultado
            
            //si es el último dígito añadimos el símbolo = 
            if (i == numero.length() - 1) {
                resultado += numero.charAt(i) + " = ";
            } else{
                //de lo contrario añadimos el símbolo +
                resultado += numero.charAt(i) + " + ";
            }                
            
        }
        
        //añadimos el resultado de la suma a la cadena
        resultado += suma;
        
        
        //imprimos la cadena final
        System.out.println(resultado);
        
        }
              
    }
    
}


Referencias

Comentarios