Saludos!!
necesito un poco de ayuda con la resolución de un problema, lo he hecho pero no sé si está bien
Os dejo el problema y la solución que he hecho, a ver si le podeis echar un vistazo, que tengo varias dudas:
1) Leer de fichero una secuencia de pares de enteros positivos, y escribir en otro cada par de números
junto con su máximo común divisor. Al final del fichero se añadirá una línea indicando cuántos pares
se han procesado.
Código:
import java.util.*;
import java.io.*;
public class p7ej1{
public static void main(String[] args) {
String nomEnt, nomSal;
int a,b,x,mcd,auxA,auxB,cp;
Scanner fEnt=null;
PrintWriter fSal=null;
Scanner teclado = new Scanner(System.in);
System.out.println("Lectura desde archivo de secuencia de pares"
+ "enteros y escritura de su MCD");
System.out.print("Archivo con secuencia de enteros:");
nomEnt = teclado.next();
System.out.print("Archivo a generar: ");
nomSal = teclado.next();
try {
fEnt = new Scanner(new BufferedReader(new FileReader(nomEnt)));
fEnt.useLocale(Locale.US);
fSal= new PrintWriter(new BufferedWriter(new FileWriter(nomSal)));
while (fEnt.hasNext()) {
a= fEnt.nextInt();
b= fEnt.nextInt();
cp = 0;
if(b>a){
x = b;
b = a;
a = x;
}
auxA= a;
auxB= b;
do{
x = b;
b = a % b;
a = x;
mcd = x;
}while (b!=0);
cp = cp +1;
fSal.println( auxA + "" + auxB + "" + mcd);
fSal.println("Se han procesado" + cp +"pares de números");}
} catch (Exception e) {
System.out.println("Excepción: " + e.getMessage());
} finally {
if (fEnt != null)
fEnt.close();
if (fSal != null)
fSal.close();
}
}
}
En negrita está la solución propiamente dicha
a ver el tema es que el maximo comun divisor es inmediato si uno de los numeros es divisible pro el otro (quiere decir que el resto = 0)
si no son divisibles, se obtiene el MCD del resto de esa division
Para ello con este cuerpo debería sobrar
x = b;
b = a % b;
a = x;
pero como me piden que escribe los numeros (a,b) en el fichero de salida (además del MCD) he creado dos variables auxiliares donde guardo las respectivas secuencias, y luego les doy salida
parece lógico, pero está bien hecho? xD
gracias de antemano!