它应该打印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();
}
Run Code Online (Sandbox Code Playgroud)
更改:
printf("%d",sum);
Run Code Online (Sandbox Code Playgroud)
至:
printf("%lld",sum);
Run Code Online (Sandbox Code Playgroud)
说明:
如果变量的大小sum是4个字节或更少,则在调用之前将4个字节的数据推入堆栈printf.
如果变量的大小sum是8个字节,则在调用之前将8个字节的数据推入堆栈printf.
之后,printf("%d"...)将尝试从堆栈中读取4个字节的数据.
long long在某些编译器(包括你的编译器)上类型的大小是8个字节,因此print("%d",sum)只打印"下半部分" sum,这显然是你视角中的错误值(除非sum<2 ^ 32).