这是我的代码
class Euler5
{
public static void main(String args[])
{
long i=2520l;
int flag= 1;
if(flag == 1)
{
search:
for(int j=10;j<=20;j++)
{
long a=i%j;
if(a!=0)
{
i+=20;
break search ;
}
if(j==20)
{
flag=0;
}
}
}
System.out.print(i);
}
}
它始终打印2540.我找到了解决它的其他方法。但是什么打击我是为什么这不起作用?
答案 0 :(得分:3)
将if(flag == 1)
替换为while (flag == 1)
。否则,您将只会在11个值上迭代一次。
答案 1 :(得分:1)
这是因为:
j
增加1
。 i % j
上的!= 0
。 i
按20
递增i = 2540
。 2540
。 答案 2 :(得分:1)
这是因为当你的for循环执行j
的第二次值时,11
会导致你的表达式为{
long a=2520/11
设置a to 1
的值不满足您的if条件并输入if条件
if(a!=0)
{
i+=20;
break search ;
}
之后它会破坏你的for循环并终止执行,总是给出输出2540。
答案 3 :(得分:1)
你的方法似乎不是正确的方法。你必须从1到20而不是10到20.你应该像Ivaylo Strandjev所说的那样在一段时间内完成这一切。也许更简单的解决方案是将2到20个数字除以素因子并添加唯一因子
e.g。 :
2 => 1 * 2
3 => 1 * 3
4 => 1 * 2 * 2
5 => 1 * 5
6 => 1 * 2 * 3
然后你保持独一无二的
1 * 2 => keep both
1 * 3 => keep only 3
1 * 2 * 2 => keep only the second 2
1 * 5 => keep only 5
1 * 2 * 3 => keep nothing
total 1 * 2 * 3 * 2 * 5 = 60 is the smallest int divisible by 2,3,4,5 and 6
你会找到17,907,120作为你的解决方案
我不擅长Java :(