【问题标题】:Trouble with printf conversion long longprintf 转换问题 long long
【发布时间】:2012-11-02 11:10:57
【问题描述】:

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

#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 编译器。我该怎么办?

【问题讨论】:

    标签: c printf long-integer


    【解决方案1】:

    我猜你应该(重新)阅读the documentation

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

    试试%lld

    【讨论】:

    • 我认为 if(number%i==0) 条件存在问题,因为即使我想在其块内打印 f("Hello"),它也不会打印任何内容。 if里面的数据会不会有大小限制?
    • @user1794004 可能是您的终端,它会在此处打印(而且总体上速度非常慢)。
    【解决方案2】:

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

    #define num 600851475143LL
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 2014-11-03
      • 1970-01-01
      • 2015-05-04
      相关资源
      最近更新 更多