-3

我刚刚开始解决 Euler 项目的问题(以及 C 代码的初学者)。

问题 1 指出:如果我们列出所有小于 10 且是 3 或 5 倍数的自然数,则得到 3、5、6 和 9。这些倍数之和为 23。求所有 3 或 5 的倍数之和低于 1000。我很确定我的代码是正确的(或者可能不是)。现在,当我在 codepad.org 或 ideone.com 之类的网站上编译我的代码时,它会显示“超时”。我猜代码运行时间太长?为什么会这样?

我的解决方案:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>

int main (int argc, char *argv[]){

    int i, j = 0;
    for (i = 1; i <= 1000; i++){   //Traverses all the positive numbers under 1000
        while ( (i % 5 == 0) || (i % 3 == 0)){  
               j = j + i;          //If it's a multiple of 3 or 5 add it to the sum
           }
    }

    printf("The sum of all multiples of 3 and 5 under 1000 is: %d", j);

    return 0;
}
4

1 回答 1

4

你有一个while声明,应该是一个if声明。 while将您带入无限循环,因为i当您测试的条件得到满足时,您永远不会更改循环内部的值。

于 2013-08-03T14:49:02.717 回答