martes, 30 de junio de 2015

IMPLEMENTACIÓN DEL ALGORITMO BIG MCD


Con la implementación de este algoritmo podemos realizar operaciones mcd pero con números de n cifras y con una velocidad considerable

Por medio de teoría matemática usamos el modulo de una parte del numero para reemplazar el numero grande por uno mas pequeño de esta manera reducimos la complejidad y tiempo del problema

Ejemplo:

Paso 1: BIG_MCD(3421689512460,1442)
 
    big_num=3421689512460
    small=1442
 
Paso 2: Usamos un temporal para partir el numero big_num
 
    temp=342168951
    big_num=2460

Paso 3: Y buscamos su mod con small

    temp=temp%small
    temp=1097

Paso 4: Luego concatenamos el nuevo temporal con el big_num

    big_num=concatenar(temp,big_num)
    big_num=concatenar(1097,2460)
    big_num=10972460

Paso  5: Con los nuevos números en el MCD verificamos si los números resultantes son operables computacionalmente o si es necesario regresar al Paso 2 y aplicar otra vez el algoritmo para reducir big_num a menos cifras

    En este caso aplicamos mcd directamente


Ahora si el código en Java

Private void calcularActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        String a,b,aux_b = null,aux,resul = "No Econtrado :(";
        boolean bucle=true;
        int cif1,cif2;
        a=n1.getText();
        b=n2.getText();
        Operaciones operar =new Operaciones();
        while(bucle)
        {
            if (a.compareTo(b)==0) {
                bucle=false;
                resul=a;
            } 
            else if(a.compareTo("0")==0)
            {
                bucle=false;
                resul=b;
            }
            else if(b.compareTo("0")==0)
            {
                bucle=false;
                resul=a;
            }            
            else if((a.length()>9)&&(b.length()>9))
            {
                resul = "No Econtrado :(";
            }
            else 
            {
                if(a.length()>9)
                {
                    //System.out.println("EL NUMERO 1 TIENEN MAS DE 9 CIFRAS");
                    //System.out.println(a);
                    a=operar.modular(a,b);
                    //System.out.println("EL nuevo A es : "+a);
                    //System.out.println("EL nuevo B es : "+b);
                }
                else if(b.length()>9)
                {
                    //System.out.println("EL NUMERO 2 TIENEN MAS DE 9 CIFRAS");
                    //System.out.println(b);
                    aux=a;        
                    a=b;
                    b=aux;
                    //System.out.println("EL nuevo A es : "+a);
                    //System.out.println("EL nuevo B es : "+b);
                }
                else
                {
                    //System.out.println("YA TERMINO :)");
                    //System.out.println(a+" , "+b);
                    resul=operar.mcd(a,b);
                    bucle=false;
                }
            }
        }
        resultado.setText(resul);
    }                                        

    private void limpiarActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
        n1.setText("");
        n2.setText("");
        resultado.setText("");
    }      

    public boolean mayor(String a, String b) {
        if(a.length()>b.length())
        { 
            return true;
        }
        else if(a.length()==b.length())
        { 
            int i=0;
            while(i<=a.length()-1)
            { 
                if(sacarnumero(a,i)>sacarnumero(b,i))
                { 
                    return true; 
                }
                if(sacarnumero(a,i)<sacarnumero(b,i))
                { 
                    return false;
                }
                else
                    i++;
                
            }
        }
        return false;
    }

    public String restar(String a, String b) {
        int i=a.length()-1;
        int j=b.length()-1;
        int an,bn,acarreo = 0;
        String res = ""; 
        while(i>=0)
        {    
            an=sacarnumero(a,i);
            if (j>=0) {
                bn=sacarnumero(b,j);
            }
            else
                bn=0; 
            if(an>=bn)
            { 
                    if (an-bn-acarreo<0) { 
                        res=res+String.valueOf(10+an-bn-acarreo); 
                        acarreo=1;
                    }
                    else
                    {
                        res=res+String.valueOf(an-bn-acarreo); 
                        acarreo=0;
                    }
            }
            else
            { 
                res=res+String.valueOf(10+an-bn-acarreo); 
                acarreo=1;
            }
            i--;
            j--;
        }
        StringBuilder builder=new StringBuilder(res);
        return builder.reverse().toString();
    }
    
    public String limpiador(String a) {
        String b="";
        char cero='0';
        int i = 0;
        while(a.charAt(i)==cero&&i<a.length()) 
        {
            i++;
        }
        while(i<a.length()) 
        {
            b=b+a.charAt(i); 
            i++;
        }
        return b;
    }
    
    public String modular(String a, String b) { 
        String temp,nBig;
        int n1,n2;
        temp=a.substring(0, 9);
        nBig=a.substring(9, a.length());
        n1=Integer.parseInt(temp);
        n2=Integer.parseInt(b); 
        if (n1>n2) {
            nBig=String.valueOf(n1%n2)+nBig;
        }
        return nBig;
    }

    public String mcd(String n1, String n2) {
        int a,b;
        a=Integer.parseInt(n1);
        b=Integer.parseInt(n2);
        while(b>0){
            if(a>b)
            {
                a=a-b;
            }
            else
            {
                b=b-a;
            }
 }
        n1=String.valueOf(a);
        return n1;
    }
    
    private static int sacarnumero(String a, int i) {
        return Integer.parseInt(String.valueOf(a.charAt(i)));
    }
banner
Previous Post
Next Post

Hola, me llamo Andrés.Soy egresado de la carrera de Ingeniería Informática en la Universidad Nacional de Trujillo (Perú).Me considero autodidacta de corazón ,amante del mundo de la programación, software libre y hacking ético

0 comentarios: