我的 gcd 程序得到错误的值
getting wrong value with my gcd program
我刚写了一个程序来计算两个数的gcd。我用数字 6 和 4 测试了它。我的程序 returns 结果是 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));
}
}
您的算法代码不正确。片段
m = n;
n = m;
没有做任何有用的事情,分配给 tmp
的值也没有做任何事情。
求余数,然后把n
的值赋给m
,再把余数赋给n
。为此目的使用 tmp
。
while (n > 0) {
tmp = m%n;
m = n;
n = tmp;
}
此外,如果您已经有参数,为什么还要在方法 gcd
中向用户询问 m
和 n
值?要么不在 gcd
中询问,只使用参数,要么将 JOptionPane
代码移动到 main
,然后将用户的号码传递到 gcd
那里。
您可以从 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;
}
这对我有用。我用 int 做到了,但将它转换为 long 并不难。
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);}
我刚写了一个程序来计算两个数的gcd。我用数字 6 和 4 测试了它。我的程序 returns 结果是 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));
}
}
您的算法代码不正确。片段
m = n;
n = m;
没有做任何有用的事情,分配给 tmp
的值也没有做任何事情。
求余数,然后把n
的值赋给m
,再把余数赋给n
。为此目的使用 tmp
。
while (n > 0) {
tmp = m%n;
m = n;
n = tmp;
}
此外,如果您已经有参数,为什么还要在方法 gcd
中向用户询问 m
和 n
值?要么不在 gcd
中询问,只使用参数,要么将 JOptionPane
代码移动到 main
,然后将用户的号码传递到 gcd
那里。
您可以从 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;
}
这对我有用。我用 int 做到了,但将它转换为 long 并不难。
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);}