【发布时间】:2016-07-14 21:08:22
【问题描述】:
在计算gcd(x, y) 的欧几里得算法示例中,x 总是大于y。这个条件重要吗?如果x 小于y 会发生什么?为什么即使x 的输入值小于y,该程序仍然返回正确的结果?
import acm.program.*;
/*
GCD Algorithm - greatest common divisor. "Euclid Algorithm approach"
*/
public class EuclidsAlgorithm extends ConsoleProgram {
public void run(){
println("This program is calculating the gratest common divisor (GCD) of two numbers.");
int x = readInt("Enter 1st number: ");
int y = readInt("Enter 2nd number: ");
println("GCD(" + x + ", " + y + ") = " + gcd(x, y) );
}
private int gcd(int m, int k){
int r = m % k;
while (r != 0){
m = k;
k = r;
r = m % k;
}
return k;
}
}
【问题讨论】:
-
试试
x > y和x < y输入,然后调试。 -
旁注:在声明中添加
static:private static int gcd(...) -
@DmitryBychenko 也许他还应该在方法中添加泛型,以防他想处理 long?.. 为什么要在不必要的地方添加东西?
-
每个循环都有一个变量移位:m
-
@Coderino Javarino:恕我直言,这取决于。如果您不打算使用
long等,您可能不想从 primitive 类型迁移到泛型(想象一下,您必须将gcd应用于,例如,百万int 对)。