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))); }
0 comentarios: