当我在我的程序中输入两个负数,找到一个数字的LCM和HCF时,HCF返回0.它适用于正数。这是HCF模块的代码。我该怎么做才能解决它?
static int hcf(int x, int y){
int hcf = 0;
for (int i = x; i>=1; i--){
if (y%i==0 && x%i==0){
hcf = i;
break;
}
}
return hcf;
}
答案 0 :(得分:2)
因为你的for循环仅在i大于或等于1时运行,由于i>=1
,如果i(或x)首先小于1,它将不会运行。< / p>
for (int i = x; i>=1; i--){ /*<<< here's your problem
^ you're setting i to a negative number, (if x is negative),
^then only running if i is positive.
i is never positive, so the for loop
never runs. */
//...
所以,问题是如果x开始为负,for循环将不会[i]开始[i]。
除了Euclid's method之外,我找不到计算它的算法,在Java中它看起来像这样:
static int hcf(int x, int y){
return (y == 0) ? x : hcf (y, x%y);
}
在此函数中,使用了递归(wikipedia,Java)以及ternary assignment。
如果y==0
那么我们返回x,否则我们返回y的hcf和y除以x时的余数(这是小%符号,它是modulo运算符)。我建议在wikipedia page上阅读。
答案 1 :(得分:1)
如果x
小于或等于0,i
将初始化为x
值,for
循环将不会执行任何操作,因为条件{{ 1}},因此该方法将返回0。
您可能应该尝试将i >= 1
初始化为i
。