用C和c++编写代码的不同值

Different values on writing the code in C and C++

本文关键字:代码 c++      更新时间:2023-10-16

我正在解决一个问题,找出所有素数的和,直到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参数。sumunsigned long long。这是未定义的行为。你可能需要printf("%llun", sum);

int不是适合存储20000000以下值的类型;实现不需要能够使用int表示-3276732767以外的值。您可能希望ijunsigned long(适合表示到0xFFFFFFFFUL的正值)或unsigned long long(适合表示到0xFFFFFFFFFFFFFFFFULL的正值)。如果要处理的值超出这个范围,可能需要考虑使用任意精度算术库,如gmplib。

void main()在c语言中不是一个有效的入口点,您可能需要int main()

ij的type改为long…并使用%ld作为格式说明符。