繁体   English   中英

我尝试编写该程序,但是它不能按照我想要的方式工作。 请告诉我我在做什么错[关闭]

[英]I tried to write the program, but it is not working the way I want it. Please tell me what am I doing wrong [closed]

这是一个问题: 修改以上程序,将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);

当您知道界限时,我不太喜欢使用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

IntStream
    .rangeClosed(7, maximum)
    .filter(i -> i % 7 == 0)
    .sum();

但这会变慢,因为range仅允许增量1,因此我们处理每个数字并对每个数字进行取模。

尝试这个:

int number=x;    
int sum=0;      
while (number<y) {    
   if (number%7==0) {
      sum+=number;
   }    
   number++;    
}    

但是有更有效的方法。 不需要循环一,而是循环七并求和这些数字:

int d=7;    
int number = (x/d)*d;
int sum=0;
while (number < y-d) {
    n+=d;
    sum+=n;
}

d表示除数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM