繁体   English   中英

在C和C ++中编写代码的不同值

[英]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表示超出-3276732767值。 您可能希望ijunsigned long (适合表示高达0xFFFFFFFFUL正值)或unsigned long long (适合表示高达0xFFFFFFFFFFFFFFFFULL正值)。 如果您正在使用超出该值的值,则可能需要考虑使用任意精度算术库,例如gmplib

void main()不是C中的有效入口点。您可能需要int main()

ij类型更改为long ...并使用%ld作为格式说明符。 在c中,您的值是整数的交叉范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM