Ayuda con algoritmo de suma de octales

Iniciado por Legnak, 23 Julio 2013, 17:44 PM

0 Miembros y 1 Visitante están viendo este tema.

Legnak

Hola, me han mandado a hacer un algoritmo de suma de octales, sé que en Java simplemente con el Integer.parseInt todo se hace muy fácil, pero el profesor me ha dicho que quiere todo a pie ._., por tanto no puedo usar esa función, esto es lo que llevo hecho de ese algoritmo, pero de momento solo me suma pequeñas cifras, espero puedan ayudarme a mejorar este código

Código (java) [Seleccionar]

package programa;

import java.util.Scanner;


public class Programa {
   
   
    static int a, b;
    public static void main(String[] args)
    {   
       Scanner leer = new Scanner(System.in);
       
       System.out.println("Introduzca el primer octal");
       String valor = leer.nextLine();
       try
       {
            int valord = Integer.parseInt(valor, 8 );
       }
       catch (NumberFormatException e)
       {
           System.out.println("El primer número debe ser octal");
       }
       
       System.out.println("Introduzca el segundo octal");
       String valorb = leer.nextLine();
       
       try
       {
           
            int valordb = Integer.parseInt(valorb, 8 );
       }
       catch (NumberFormatException e)
       {
           System.out.println("El segundo número debe ser octal");
       }
       String res = "";
       int val;
       int mayor = valor.length() >  valorb.length() ? valor.length() : valorb.length();
       int acarreo = 0;
       boolean seguir = true;
       for (int cont = mayor-1; cont >= 0; cont--)
       {
           val = 0;
           try
           {
               a = Character.getNumericValue(valor.charAt(cont));
   
           }
           catch (StringIndexOutOfBoundsException e)
           { 
                a  = 0;
                seguir = false;
               
           }

           try
           {
 
               b = Character.getNumericValue(valorb.charAt(cont));
       
                           
            }
           catch (StringIndexOutOfBoundsException e)
           { 
                b = 0;
                seguir = false;
               
           }
           
           
           
               val = a + b;
               if (acarreo > 0)
               { 
                  val += acarreo;
                  acarreo = 0;
               }
               if (val >= 10)
                  acarreo =  val/10;
               
               if (val > 7)
                   
                      val -= 8;
                 
                 res += val;
                 
                 
               
               if (!seguir)
               {
                   if (val > 0) res += val;
                   else if (acarreo > 0) res += val;
               }
             
                   
       }   
           
         
       res = new StringBuffer(res).reverse().toString();
       System.out.println(res);
     
    }
}


Saludos y gracias de antemano

Slider324

puedes cambiar:

leer.nextLine();

por alguna de esta para ya no necesitar convertir a integer, double etc.. y no usar parse para convertir, para usar numeros grandes te recomiendo double saludos

leer.nextDouble();
leer.nextInt();
leer.nextFloat();

Legnak

hermano lo que pasa es que para validar que sean enteros de 8 bits uso la función Integer.parseInt y esa usa como parámetro un String, así que no tengo opción :xD
gracias por comentar ;D

~ Yoya ~

En vez de hacer un código modo hacker, simplemente enfocate en crear dos funciónes. Una que convierta de octal a decimal y otra a decimal a octal. Luego de esos sumar, multiplicar y dividir con octal seria muy facil...

También tienes el método estático valueOf de la clase Integer que hace exactamente lo mismo que parseInt, excepto que este retorna un Wrapper. Pero utilizarlo seria un insulto hacia al profesor jejeje, seguro te hecha xD.

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Legnak

el problema es que el profesor quiere que la suma sea "a pie", con el asunto del acarreo y eso D:

Legnak

ya le he avanzado, el bug que tiene por el momento es que no puedo sumar dos números de distintas cifras, acá lo dejo por si alguien me quiere ayudar  :silbar:


Código (java) [Seleccionar]
public String sumar(String valor, String valorb)
   {
     
       int a, b;
       String res = "";
      int val = 0;
      int recorrido = valor.length() >  valorb.length() ? valor.length() : valorb.length();
   
      int acarreo = 0;
   
      for (int cont = recorrido-1; cont >= 0; cont--)
      {
         
          val = 0;
          try
          {
              a = Character.getNumericValue(valor.charAt(cont));
 
          }
          catch (StringIndexOutOfBoundsException e)
          {  
             
               a  = 0;
               
               
          }

          try
          {
 
              b = Character.getNumericValue(valorb.charAt(cont));
     
                         
           }
          catch (StringIndexOutOfBoundsException e)
          {  
               b = 0;
               
          }
         
         
              val = a + b;
             
         
              if (acarreo > 0)
              {
                  val += acarreo;
                  acarreo = 0;
              }
             
               
               
              if (val > 7)
              {
                 acarreo = 1;
                  val -= 8 ;
              }
               
                res += val;
             
                 
      }    
     
 
      if (acarreo > 0)
      {
           res = res + "" + acarreo ;
      }
         
    res  = new StringBuffer(res).reverse().toString();
       return res;
   }

Legnak