【发布时间】:2012-12-02 20:37:07
【问题描述】:
问题来了:
"编写一个名为 gcd 的方法,它接受两个整数作为参数并返回这两个数的最大公约数。两个整数 a 和 b 的最大公约数 (GCD) 是同时是 a 的因数的最大整数b. 任意数与1的GCD为1,任意数与0的GCD为该数。
计算两个数的 GCD 的一种有效方法是使用 Euclid 算法,该算法说明如下:
GCD(A, B) = GCD(B, A % B)
GCD(A, 0) = Absolute value of A"
我真的很困惑如何解决这个问题。我只是想要一些关于我在迄今为止的程序中做错了什么的提示和技巧。 (我必须放一个扫描仪,这是我老师的要求。) 不要给我完整的代码,因为我有点想自己解决这个问题。也许只是给我一个提示,说明我如何结合您在上面看到的这个公式。 (如果你想知道我为什么输入 == 0,那是因为我认为如果你有两个数字,比如 0 和 90,它们的 GCD 应该是 0 对吧??)
另外,我的代码必须包含 while 循环...我更喜欢 if 循环...
提前致谢! :)
我目前的计划:
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
int a = console.nextInt();
int b = console.nextInt();
gcd (a, b);
}
public static void gcd(int a, int b) {
System.out.print("Type in two numbers and I will print outs its Greatest Common Divisor: ");
int gcdNum1 = console.nextInt();
int gcdNum2 = console.nextInt();
while (gcdNum1 == 0) {
gcdNum1 = 0;
}
while (gcdNum2 > gcdNum1) {
int gcd = gcdNum1 % gcdNum2;
}
System.out.print(gcdNum1 + gcdNum2);
}
}
【问题讨论】:
-
提示 - 你需要一个递归调用。
-
您将
a和b作为参数传递给您的方法,因此无需从控制台再次读取它们(并且console变量在方法中不可见,因此您的代码无论如何都不会编译)。此外,如果输入,第一个循环看起来非常无限。 -
我更喜欢 if 循环...这很复杂,因为
if没有循环 -
哎呀,你是对的。哈哈错字了。
标签: java loops while-loop greatest-common-divisor