我刚开始用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方法计算素数。
答案 0 :(得分:2)
scanf("%d",&below);
这不是您阅读long int
(below
对象的类型)的方式,而是使用ld
转换说明符。您的printf
电话也是如此。
答案 1 :(得分:0)
有多个错误:
您从未初始化board[0]
。此数组元素将包含垃圾值。
您正在此处访问board
数组:
for(a=2*i;a<=below;a+=i)
{
board[a]=1; //Here Index 'a' can be equal to below
}
正如@ouah