Muy buenas tengan todos.
He estado tratando de resolver como puedo sacar el máximo comun divisor a dos numeros en JAVA , y me base en el algoritmo de euclides para ello.
el código me no tiene errores en cuanto a sintaxis, pero con respecto a su funcionalidad hay algo q está truncando el hecho q me de el resultado
he aqui el codigo
OTORGO MAXIMA CALIFICACION A QUIEN PUEDA AYUDARME A HALLAR EL ERROR EN CUANTO A LOS CÁLCULOS
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class mcd{
public static void main(String args[]){
int n1; int n2; int resto; int mcd; int aux;
n1=0; n2=0; resto=0; mcd=0; aux=resto;
System.out.println("Ingrese un numero:");
try {
BufferedReader bf = new BufferedReader(new
InputStreamReader(System.in));
n1 = Integer.parseInt(bf.readLine());
}catch(Exception e){
e.printStackTrace();
}
System.out.println("Ingrese otro numero:");
try {
BufferedReader bf = new BufferedReader(new
InputStreamReader(System.in));
n2 = Integer.parseInt(bf.readLine());
}catch(Exception e){
e.printStackTrace();
}
if (n1>n2) {
resto= n1%n2;
if (resto==0){
System.out.println("El mcd de ambos numeros es:"+n2);
}
if (resto!=0) {
while (resto!=0){
do{
aux=resto;
resto=n1%aux;
}while (resto==0);
}
}
System.out.println("El mcd de ambos numeros es:"+aux);
}
if (n1<n2){
resto= n2%n1;
if (resto==0){
System.out.println("El mcd de ambos numeros es:"+n2);
}
System.out.println("El mcd de ambos numeros es:"+mcd);
if (resto!=0){
while (resto!=0){
do{
aux=resto;
resto= n2%aux;
}while (resto==0);
}
System.out.println("El mcd de ambos numeros es:"+aux);
}
}
}
}
Copyright © 2024 Q2A.ES - All rights reserved.
Answers & Comments
Verified answer
dejeme decirle que ese algoritmo no es el de euclides al parecer ,,, te dejo estos ejemplos que solo son los metodos
el metodo recibe los numeros a considerar
para este el primero que envies el mayor es a
public int mcd ( int a, int b)
{
// asumiendo que a es mayor que b --a>b
int mcd= 1;
for ( int i=0; i<=b;i++)
{
if ( a%i == 0 && b%i==0)
mcd=1;
}
return i; // retorna el maximos comun divisor
}
otra forma
este es el algoritmo de euclides
public int mcd( int a, int b)
{
int c = 0;
while ( a =! b) // a diferente de b
{
if ( a>b)
{
c= a-b
a=b;
b=c;
}
else{
c= b-a;
a=b;
a=c;
}
}
return c; //retorna el maximo comun divisor
}
el anterior es el verdadero algoritmo de euclides
otra forma esta es la forma recursiva y la mas elegante
public int mcd( int a; int b)
{
if ( b==0)
return a;
else
return mcd( b, a%b);
}
este ultimo es un poco complejo pero su solucion es mas corta y facil de desarrollar
veo algo en usted,,, no haces metodos para desarrollar una tarea todo lo hace dentro de la clase,,, lo mejor es hacer metodos para que cada uno se encargue de las tareas diferentes y asi el problema se reduce en subproblemas...solo tienes que hacer las validaciones que haces al principio y enviarle al metodo mcd los numeros que entras por consola que va a comparar para e sacar maximo comun divisor y lsito, el metodo se encarga de darte la solucion...
y eso es todo si no entiendes algo me escribes al correo
bien pues