2

我正在编写一个简单的 java 程序来找到可以被 1 到 20 的所有数字整除的最小数字。

我写了以下代码:

package smallmultiple;
public class SmallMultiple { 
    public static void main(String[] args) {
        int sml = 0;
        outerloop:
        for (int i = 40; i < 100000; i++) {
            int j=1;
            do {
                if(i%j==0)
                    j++;                
            } while(j<21);

            if(j==20) {
                sml=i;
                break outerloop;
            } 
        }

        System.out.println(sml);
    }
}

它没有给出任何错误,但没有给出任何输出。

4

4 回答 4

3

你可以试试这个比你的解决方案快一点: -

for(int i = 190; ; i += 190) {
        if(i % 3 == 0 
                && i % 4 == 0
                && i % 6 == 0 
                && i % 7 == 0
                && i % 8 == 0 
                && i % 9 == 0
                && i % 11 == 0
                && i % 12 == 0 
                && i % 13 == 0 
                && i % 14 == 0 
                && i % 15 == 0
                && i % 16 == 0
                && i % 17 == 0
                && i % 18 == 0
                && i % 20 == 0) {
            System.out.println(i);
            break;
        }
    }

你也可以看看这篇文章

于 2013-08-18T07:37:00.830 回答
0

j只有当i完全可被 整除时,您才会递增j。你不应该打破或退出do.. while至少一个数字不可整除的循环吗?我相信不这样做会导致无限循环。它应该是这样的

if(i%j==0) {
   j++;
}
else {
  break;
}  
于 2013-08-18T07:39:11.543 回答
0

这很简单。让我解释一下你的循环。首先,i = 40j = 1,没关系。然后j++.Nexti = 40j = 2,它仍然正确。然后j++再一次。现在i = 40, j = 3and i%j !=0=>j cannot ++和 j 仍然等于 3。你看,j = 3仍然满足你的循环( j < 21)然后它循环和循环永远。这就是您无法获得任何输出的原因。您可以使用您的 IDE 调试来查找此错误。对不起我的英语不好。

于 2013-08-18T07:50:23.377 回答
0

在java中,为了尊重面向对象的最佳实践,不建议用户标签,试试这个:

public class NumberTool {

    public static void main(String[] args) {
        System.out.println("Smallest number is : " + getSmallestNumberDividedByOneToTwnety());
    }

    public static int getSmallestNumberDividedByOneToTwnety() {

        for ( int i = 40; i <= 2147483647; i++) {

            if (isNumberDivdedByOneToTwenty(i)) {
                return i;
            }

        }

        return 0;
    }

    public static boolean isNumberDivdedByOneToTwenty(int numberToTest) {

        for (int i = 1; i <= 20; i++) {
            if (numberToTest % i != 0) {
                return false;
            }
        }

        return true;

    }

}

输出是:

最小的数字是:232792560

于 2013-08-18T07:53:38.123 回答