HCF的负数

时间:2014-11-12 16:28:31

标签: java math

当我在我的程序中输入两个负数,找到一个数字的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;
}

2 个答案:

答案 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);
}

在此函数中,使用了递归(wikipediaJava)以及ternary assignment

如果y==0那么我们返回x,否则我们返回y的hcf和y除以x时的余数(这是小%符号,它是modulo运算符)。我建议在wikipedia page上阅读。

答案 1 :(得分:1)

如果x小于或等于0,i将初始化为x值,for循环将不会执行任何操作,因为条件{{ 1}},因此该方法将返回0。

您可能应该尝试将i >= 1初始化为i