用我的gcd程序获得错误的价值

时间:2016-03-29 18:53:20

标签: java greatest-common-divisor

我刚写了一个程序来计算两个数字的gcd。我用数字6和4测试了它。我的程序返回4的结果,这显然是错误的,因为6和4的gcd是2。

import javax.swing.*;

public class Zahlen {
  public static long gcd(long m, long n){
    m = Long.parseLong(JOptionPane.showInputDialog("Enter value for m"));
    n = Long.parseLong(JOptionPane.showInputDialog("Enter value for n"));
    long tmp;
    while (n > 0) { 
      tmp = n;
      m = n;
      n = m;
      n = n%m;
    } // end of while
    return m;
  }

  public static void main(String[] args){
    System.out.print(Zahlen.gcd(6,4));
  }
}

3 个答案:

答案 0 :(得分:1)

您的算法代码不正确。片段

m = n;
n = m;

没有任何用处,分配给tmp的值也没有做任何事情。

获取余数,然后将n的值分配给m,然后将余数分配给n。为此目的使用tmp

while (n > 0) {
    tmp = m%n;
    m = n;
    n = tmp;
}

此外,如果您已经拥有参数,为什么要在方法m中询问用户ngcd值?请勿在{{1​​}}中询问并仅使用参数,或将gcd代码移至JOptionPane,并将用户的号码传递到main那里。

答案 1 :(得分:-1)

您可以从main方法调用以下函数(不使用递归):

public static int gcd(int n, int m){
    int gcd=1;
    int upto=n>m?m:n;

    for(int i=1;i<=upto;i++){
       if(n%i==0 && m%i==0){
            gcd=i;
        }
    }
   return gcd;
}

答案 2 :(得分:-1)

这对我有用。我用int做了它,但把它投入很长时间并不难。

int m = Integer.parseInt(JOptionPane.showInputDialog("Enter value for m"));
         int n = Integer.parseInt(JOptionPane.showInputDialog("Enter value for n"));
        int i =1;
        int gcd=1;
        while(m>n?i<=n:i<=m){
            if(m%i==0&& n%i==0){
                gcd=i;
            }
            i++;
        }
        System.out.println(gcd);}