3

我一直在研究一个项目 euler 问题,其本质上会强迫您使用具有大存储空间的数据类型。

#include <stdio.h>
#include <conio.h>
#define num 600851475143

int main()
{
long long i, j, count=0, number=num, k;
for(i=2;number!=1;i++)
{
    count=0;
    for(j=1;j<=i;j++)
    {
        if((i%j)==0)
        {
            count++;
        }
    }
    for(k=0;k<100000000;k++)
    {}
    if(count==2)
    {
        printf("                      %d\n", i);
        if(number%i==0)
        {
            number/=i;
            printf("      %d\n", number);
            printf("%d\n", i);
            i=2;
        }
    }
}
getch();
return 0;
}

当我编译并运行程序时,没有打印任何数字。我尝试了各种 printf 转换 %ll、%l,我更改了数据类型。我正在使用 GNU GCC 编译器。我应该怎么办?

4

2 回答 2

3

我猜你应该(重新)阅读文档

%ll不起作用,因为ll它不是一个完整的说明符,它只是实际转换说明符的修饰符,应该遵循。

试试%lld

于 2012-11-02T11:13:03.377 回答
2

的正确格式printf%lld. 此外,您应该为您的常量使用前缀num,因为这个整数常量太大而无法保存在long类型中。

#define num 600851475143LL

也许您应该避免使用小写宏的标识符?

于 2012-11-02T11:13:15.140 回答