我刚刚开始使用C编程,并且正在从中进行锻炼。我现在在https://projecteuler.net/problem=10上,我写了以下代码:

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

int main()
{
    long int i=0,below=0,a=0;
    long int sum=0;
    printf("belowe number: ");
    scanf("%d",&below);
    int board[below];
    for(i=1;i<below;++i){
        board[i]=0;
    }
    for(i=2;i<below;i++){
        if(board[i]==0){
            sum+=i;
            for(a=2*i;a<=below;a+=i){
                board[a]=1;
            }
        }
    }
    printf("sum = %d",sum);
    return 0;
}


问题在于它返回的错误总和(1179908154)而不是(142913828922)。你能告诉我错误在哪里吗?我正在使用THIS方法来计算素数。

最佳答案

scanf("%d",&below);


这不是您阅读long intbelow对象的类型)的方式,而是使用ld转换说明符。与您的printf呼叫相同。

07-26 09:35