这是一个问题:修改上述程序,将1到1000之间可被7整除的所有数字相加。 这是我的代码:
int x=1;
int y=1000;
int number=x;
int sum=0;
while (number%7==0) {
sum=sum+number;
++number;
}
System.out.printf("The sum of all numbers divisible by 7 from 1 to 100 is %d", sum);
答案 0 :(得分:1)
当你知道边界时,我真的不喜欢使用while循环的方法。
首先,从找到最高可能性开始:
int maximum = 1000 - 1000 % 7;//994
然后从第一步循环到最后一步,按步骤7进行循环。
for(int x = 7; x <= maximum; x += 7)
sum += x;
无需使用慢模来检查,因为我们有两个边界并且按步长增加7.还要注意<=
。如果我们想要包含最高的,那么=
就很重要。
如果你愿意,你仍然可以使用while
进行操作,但在你的例子中,你循环直到找到一个不能被7整除的数字。你从1开始,所以你永远不会进入。您需要在边界之间循环并使用if
验证当前数字是否可被7整除,然后求和。
再次,因为您知道边界,上面显示的for
循环看起来更清晰。
为了完整起见,使用Java 8可以在IntStream
的帮助下实现这一目的:
IntStream
.rangeClosed(7, maximum)
.filter(i -> i % 7 == 0)
.sum();
但这会慢一些,因为range
只允许递增1,所以我们处理每个数字并对每个数字执行模数。
答案 1 :(得分:0)
试试这个:
int number=x;
int sum=0;
while (number<y) {
if (number%7==0) {
sum+=number;
}
number++;
}
然而,有更有效的方法。没有必要循环一个,但循环7并将这些数字相加:
int d=7;
int number = (x/d)*d;
int sum=0;
while (number < y-d) {
n+=d;
sum+=n;
}
d
代表除数。