它应该打印142,913,828,922,(而不是1179908154它是怎么做的......) 怎么了?
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main()
{
int n=2000000;
long long sum=0;
int m;
int i;
for(i=2;i<n;i++)
{
for(m=2;m<=sqrt(i);m++)
{
if(i%m==0)
{
break;
}
}
if(m>sqrt(i))
sum+=i;
}
printf("%d",sum);
getch();
}
答案 0 :(得分:5)
更改:强>
printf("%d",sum);
要强>
printf("%lld",sum);
<强>解释强>
如果变量sum
的大小为4字节或更小,则在调用printf
之前,会将4字节数据压入堆栈。
如果变量sum
的大小是8个字节,则在调用printf
之前,会将8个字节的数据压入堆栈。
之后,printf("%d"...)
将尝试从堆栈中读取4个字节的数据。
类型long long
的大小在某些编译器(包括你的编译器)上是8个字节,因此print("%d",sum)
仅打印sum
的“下半部分”,这显然是错误的值在你的观点中(除非sum
&lt; 2 ^ 32)。
答案 1 :(得分:3)
错误在于:
printf ("%d\n", sum);
应该是这样的:
printf ("%lld\n", sum);