printf转换long long时出现问题

3

我一直在解决一个Project 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编译器。我该怎么办?

2个回答

3

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

%ll不起作用是因为ll并不是完整的说明符,它只是实际转换说明符的修饰符,其后必须跟随实际转换说明符。

请尝试使用%lld


我认为条件语句if(number%i==0)存在问题,因为即使我在其代码块中使用printf("Hello"),它也不会打印任何内容。是否有可能if语句内部的数据存在大小限制? - user1794004
@user1794004 可能是你的终端,它在这里打印(并且整体上令人惊讶地不慢)。 - Daniel Fischer

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

#define num 600851475143LL

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接