我刚写了一个程序来计算两个数字的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));
}
}
答案 0 :(得分:1)
您的算法代码不正确。片段
m = n;
n = m;
没有任何用处,分配给tmp
的值也没有做任何事情。
获取余数,然后将n
的值分配给m
,然后将余数分配给n
。为此目的使用tmp
。
while (n > 0) {
tmp = m%n;
m = n;
n = tmp;
}
此外,如果您已经拥有参数,为什么要在方法m
中询问用户n
和gcd
值?请勿在{{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);}