/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		 try{
            int opcion, close = 0,n1,n2, x1, y2;
            String x, y;
            /*De claracion del BufferedReader, para ingresar numeros por teclado*/
            BufferedReader is = new BufferedReader
                    (new InputStreamReader(System.in));
            
            /*Esta condicion la utilizo al principio del programa para que 
             * cuando se ejecute alguna operacion de la calculadora, se vuelva
             * a abrir el menu, para que asi no finalize el programa, hasta que
             * se elija la opcion 6 (salir)
             */
            System.out.println("Ingrese primer numero binario");
            x = is.readLine();
            while(validarBinario(x) == false){
                System.out.println("El numero ingresado no es binario, ingrese otro");
                x = is.readLine();
            }
            x1 = Integer.parseInt(x);
            n1 = binario2Decimal(x1);
                
            System.out.println("Ingrese segundo numero binario");
            y= is.readLine();
            while(validarBinario(y)== false){
                System.out.println("Ingrese segundo numero binario");
                y= is.readLine();
            }
            y2 = Integer.parseInt(y);
            n2= binario2Decimal(y2);
            
            
            while (close == 0){
                
            
                System.out.println("Elija la operacion a realizar");
                System.out.println("Opcion 1: Suma");
                System.out.println("Opcion 2: Resta");
                System.out.println("Opcion 3: Multiplicacion");
                System.out.println("Opcion 4: Division");
                System.out.println("Opcion 5: Salir");
                
                System.out.println("Ingrese numero de la Operacion: ");
                opcion = Integer.parseInt(is.readLine());
                
                switch(opcion)
                {
                    /*La opcion 1 que permite sumar la cantidad de numeros que sea ingresado por el usuario
                     * Retorna: Int
                     */
                    
                    case 1: FuncionSumar( n1 ,n2);
                        break;
                        
                    case 2: FuncionRestar(n1 , n2);               
                        break;
                        
                    case 3: FuncionMultiplicar(n1, n2);               
                        break;
                    
                    case 4: FuncionDividir(n1,n2);                
                        break;
                        
                                    
                    case 5:
                        /*Lo que hace el caso 6 es darle un valor a la variable close
                         que sea distinto de 0,para que finalize el ciclo que puse
                         al principio para el menu, y asi terminar de ejecutar el programa*/
                        close = 1;
                        break;
                    default:
                        System.out.println("La opcion ingresada es incorrecta");
                }
            }
        }catch (NumberFormatException ex){
            System.err.println("Numero no valido");
        }
        catch (IOException e){
            System.err.println("Unexpected IO ERROR: " + e);
        }
	}
	public static void FuncionSumar(int n1,int n2){
        int suma,resultado;
        suma = n1 +n2;
        resultado = decimal2Binario (suma);
        System.out.println("El resultado es: " + resultado);
    }
    
    
    public static void FuncionRestar(int n1, int n2){
        int resta, resultado;
        if( n1 > n2){
            resta = n1 - n2;
        }else{
            resta = n2-n1;
        }
        resultado = decimal2Binario(resta);
        System.out.println("El resultado es: " + resultado);
        
    }
    
    public static void FuncionMultiplicar(int n1, int n2) {
        int multi,resultado;
        multi= n1*n2;
        resultado = decimal2Binario(multi);
        System.out.println("El resultado es: " + resultado);
            
            
            
    }
    
    public static void FuncionDividir(int n1, int n2){
        int div,resultado;
        if(n1>n2){
            div = n1/n2;
        }
        else{
            div = n2/n1;
        }
        resultado = decimal2Binario(div);
        System.out.println("El resultado es: " + resultado);
    }
    
    public static int binario2Decimal (int binario){
        int factor = 1, decimal = 0,d;
        while(binario > 0){
            d= binario%10;
            binario = binario/10;
            decimal = decimal + factor*d;
            factor = factor * 2;
        }
                
        return decimal;
        
    }
    
    public static int decimal2Binario (int decimal){
        int factor = 1, binario = 0,d;
        while(decimal > 0){
            d= decimal%2;
            decimal = decimal /2;
            binario = binario + factor * d;
            factor = factor * 10 ;
        }
        return binario;
        
    }
    
    public static boolean validarBinario(String validador){
        boolean aux = true;
        for (int i = 0 ; i < validador.length() ; i++) {
            char c = validador.charAt(i);
            if(c == '0' || c == '1'){

            }else
                aux = false;
            
        }
        if(aux)
            return true;
        else
            return false;
    }
}