lunes, 10 de marzo de 2014

Acepta el reto: Cuántas me llevo (124)

¿Cuántas me llevo?

Tiempo máximo: 2,000 s  Memoria máxima: 4096 KiB
Cuando aprendemos a sumar números pronto nos cuentan aquello de "llevarse una": cuando los dos dígitos que sumamos llegan a la decena tenemos "acarreo" que debemos sumar a los siguientes dígitos (de la izquierda).
Cuando nuestros maestros nos ponían ejercicios, antes tenían que contar cuántas veces tendríamos que "llevarnos una" y en base a eso medían la dificultad del ejercicio.
¿Puedes hacer un programa que automatice esa tarea?

Entrada

La entrada estará compuesta de numerosos casos de prueba, cada uno de ellos en una línea. En cada línea apareceran dos números positivos separados por un espacio. Se garantiza que los números no tendrán más de 1000 dígitos.
Los casos de prueba terminan con el caso especial 0 0, que no provocará salida.

Salida

Para cada caso de prueba hay que escribir en una línea el número de veces que hay "acarreo" en la suma.

Entrada de ejemplo

123 456
555 555
123 594
0 0

Salida de ejemplo

0
3
1

 import java.util.Scanner;
/**
*
* @author calidade
*/
public class Programamecuantas {

  

     public static void main(String[] args) {
        Scanner leo = new Scanner(System.in);
        String cadena,num1,num2,mayor,menor;
        int pos,llevo,cont,longitud,acarreo,dif;
      
      
        cadena=leo.nextLine();
      
        pos=cadena.indexOf(" ", 0);
        num1=cadena.substring(0, pos);
        num2=cadena.substring(pos+1);
        // System.out.println(num1);
        // System.out.println(num2);
        while(Character.getNumericValue(num1.charAt(0))!=0 || Character.getNumericValue(num2.charAt(0))!=0)
        {
            cont=0;
            llevo=0;
            if (num1.length()<num2.length())
            {
                mayor=num2;
                menor=num1;
                 }
            else
            {
                mayor=num1;
                menor=num2;
          
            }
            longitud=mayor.length();
            dif=mayor.length()-menor.length();
            for (int i = longitud-1; i >=0 ;i--) {
                acarreo=0;
                acarreo+=llevo;
                acarreo += Character.getNumericValue(mayor.charAt(i));
                if(i-dif>=0) acarreo+= Character.getNumericValue(menor.charAt(i-dif));
                else llevo=0;
              
                if (acarreo>9)
                { llevo= acarreo/10;
                    ++cont;
                }
                else llevo=0;
                if (llevo==0 && (i-dif<0)){ break;}
            }
            System.out.println(cont);
            cadena=leo.nextLine();
      
        pos=cadena.indexOf(" ", 0);
        num1=cadena.substring(0, pos);
        num2=cadena.substring(pos+1);
          
        }
      
  
    }

  
}


Enlaces:
https://www.aceptaelreto.com
https://www.aceptaelreto.com/problem/statement.php?id=124