Retos - 024: Suma de dígitos

Nivel de dificultad aproximado (1 a 5): 2  

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 109 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.

Nota: el programa no debe avisar al usuario con mensajes como "Introduzca un número". Debe leer directamente el número que introduzca el usuario y la respuesta debe ser exactamente como aparece aquí explicado y como se puede comprobar en el ejemplo. (Asegúrate de que has leído el resto de preguntas frecuentes antes de plantear tu solución)

Entrada
3433
64323
8
-1

Salida
3 + 4 + 3 + 3 = 13
6 + 4 + 3 + 2 + 3 = 18
8 = 8

Para calcular la suma de los dígitos basta con recorrer todos ellos, uno por uno (con [], charAt, mid u órdenes parecidas, según el lenguaje) y, para cada uno de ellos, calcular su valor numérico y añadirlo al valor actual de una suma, que empieza siendo cero.

Hay que recordar que, en la mayoría de los lenguajes, no se puede sumar directamente los caracteres, sino que hay que convertir a su valor numérico; en muchos lenguajes derivados de C, un número como "10" daría lugar a '1'+'0', que no es 1, sino 97, porque se sumarían los códigos ASCII de los caracteres '1' (49) y '0' (48).

Aportar una solución

Tu nombre (si quieres que aparezca):
Tu web/blog (si quieres que incluyamos un enlace a ella):
Tu e-mail (no se mostrará; si quieres que te avisemos cuando esté publicado):
¿Eres humano? ¿Cuánto es 2 más 3?
Lenguaje
Fuente:

*-------------------------------*
*LENGUAJE: COBOL RM 74.         *
*COMPILADO 12/03/2015.          *
*AUTOR SAM.                     *
*PARA: www.nachocabanes.com     *
*RETO: 024: Suma de dígitos.    *
* No probrado por el revisor    *
*-------------------------------*
 
 IDENTIFICATION        DIVISION.
 PROGRAM-ID.           FACTOR.
 AUTHOR.               SAM.
 ENVIRONMENT           DIVISION.
 DATA                  DIVISION.
 WORKING-STORAGE       SECTION.
 01 WKS-ENTRADA       PIC 9(10).
 01 TABLA  REDEFINES  WKS-ENTRADA.
    03 T-NUMERO       OCCURS 10 TIMES.
       05 T-DIGITO    PIC 9.
 01 WKS-I             PIC 9(03).
 01 WKS-RESULTADO     PIC 9(10).
 PROCEDURE             DIVISION.
 INICIO.
    ACCEPT  WKS-ENTRADA
*CUENTA CUANTOS VALORES HAY .
    INSPECT WKS-ENTRADA TALLYING WKS-CONTADOR FOR CHARACTERS.
*SUMA LA CANTIDAD DE CARACTERES QUE EXISTAN.
    PERFORM 1000-PROCESO
            VARYING WKS-I FROM 1 BY 1
            UNTIL WKS-I > WKS-CONTADOR.
    DISPLAY " = " WKS-RESULTADO.
    STOP    RUN.
 1000-PROCESO.
    ADD     T-DIGITO(WKS-I) TO WKS-RESULTADO.
    DISPLAY T-DIGITO(WKS-I) " + ".
 

// Reto 24: Suma de dígitos
// 3 + 4 + 3 + 3 = 13
// Nacho Cabanes, 03-Junio-2014
 
#include <iostream>
#include <string>
using namespace std;
 
int main() 
{
    unsigned int i;
    string texto;
    int total;
 
    do
    {
        cin >> texto;
        total = 0;
 
        if (texto[0] != '-')  // Si no es negativo
        {
            for (i=0; i<texto.length() ; i++)
            {
                if (i > 0)
                    cout << "+ ";  // Operandos desde la segunda cifra
                total += texto[i] - 48; // 48 = ASCII '0'
                cout << texto[i] << " ";
            }
            cout << "= " << total << endl;
        }
    }
    while (texto[0] != '-');  // Terminamos si es negativo
 
    return 0;
}
 

// Reto 24: Suma de dígitos
// 3 + 4 + 3 + 3 = 13
// harold de la cruz, 18-Nov-2014
 
#include<iostream>
using namespace std;
int main()
{
    int num,i=1,suma=0,dig=0;
    while(cin>>num and num>=0)
    {
        while(num!=0)
        {
         i=10;
            do{
                dig=num%i;
            }while(num%i>10);
            suma=suma+dig;
            num=(int)num/10;
            if(num==0)
                    cout<<dig<<"=";
            else
                cout<<dig<<"+";
 
        }
        cout<<suma<<endl;
        suma=0;
    }
    return 0;
}

// Solución al reto 24: Suma de dígitos
// Luis Massó, Junio 2014
package reto1;
 
import java.util.Scanner;
/**
 * Author: Luis
 */
public class Reto1
{
 
    public static void main(String[] args)
    {
 
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        int sum = 0;
        String salida = "";
        for (int i = 0; i < line.length(); i++)
        {
            int n = Integer.parseInt("" + line.charAt(i)) ;
            sum += n;
            if (i != line.length() - 1)
            {
                salida = salida.concat(n + " + ");
            } else
            {
                salida = salida.concat(n + " = " + sum);
            }
        }
 
        System.out.println(salida);
    }
 
}

/*
    Solucion al reto #024: "Suma de dígitos"
    Randy Rivera Rodriguez, 09-jul-2014
 
    Nota: solución incompleta, falta repetir hasta -1
*/
 
import java.io.Console;
public class sumaDigitos{
        public static void main(String [] args){
                Console terminal = System.console();
 
                String cad = new String(terminal.readLine());
                int suma=0, Ntemp;
                String salida = "", Ctemp;
 
                for (int i=0; i<cad.length(); i++){
                        Ctemp = ""+cad.charAt(i);
                        Ntemp = Integer.parseInt(Ctemp);
                        suma = suma+Ntemp;
                        salida = salida+""+cad.charAt(i);
                          if(i == cad.length()-1){
                                salida = salida+" = ";
                          }else{
                                salida = salida+" + ";
                          }
                }
                System.out.println(salida+suma);
 
        }
}
 

// Reto 24: Suma de dígitos
// 3 + 4 + 3 + 3 = 13
// César Alegre, 08-Ago-2014
// Solución alternativa, que muestra todas las respuestas al final
 
import java.util.Scanner;
 
public class sumaDigitos3{
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int suma,n;
        String respuesta="";
        String linea="";
 
        /*un bluce que debe terminar cuando la entrada
        es un numero negativo*/
        do {
            /*para ingresar una linea*/
            linea=entrada.nextLine();
 
            /* un if que funciona como filtro
            cuando tu 1er caracter sea el "-",
            el bucle se detendrá y así evitamos un error
            de formato de numero*/
            if((""+linea.charAt(0)).equals("-")){break;}
            suma=0;
            n=0;
            /*aca trabajamos la ultima linea ingresada*/
            for (int i = 0; i < linea.length(); i++) {
                n=Integer.parseInt(""+linea.charAt(i));
                suma+=n;
                if(i<linea.length()-1){respuesta+=(n+" + ");}
                else {respuesta+=(n+" = "+suma);}
            }
            respuesta+="\n";
        } while (0<=Integer.parseInt(linea));
 
        System.out.println(respuesta);
    }
}