[英]Different values on writing the code in C and C++
我正在解决一个问题,找到所有素数的总和,直到200万,在C中。我一直得到错误的答案(1179908154)但是当我在c ++中编写相同的代码时,它给出了正确的答案(142913828922)。 请告诉我为什么会这样,谢谢。
这是我的代码
void main()
{
int i,j;
unsigned long long sum;
for(sum=2,i=3;i<=2000000;i+=2)
{
for(j=3;j*j<=i;j++)
if(i%j==0)
break;
if(j*j>i)
sum+=i;
}
printf("%d",sum);
}
我在Windows 7,32位并使用GNU GCC v4.7.1
%d
告诉printf
期望一个int
参数。 sum
是一个unsigned long long
。 这是未定义的行为。 你可能想要printf("%llu\\n", sum);
。
int
不是适合存储高达20000000
值的类型; 实现不需要能够使用int
表示超出-32767
或32767
值。 您可能希望i
和j
为unsigned long
(适合表示高达0xFFFFFFFFUL
正值)或unsigned long long
(适合表示高达0xFFFFFFFFFFFFFFFFULL
正值)。 如果您正在使用超出该值的值,则可能需要考虑使用任意精度算术库,例如gmplib 。
void main()
不是C中的有效入口点。您可能需要int main()
。
将i
和j
类型更改为long
...并使用%ld
作为格式说明符。 在c中,您的值是整数的交叉范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.