【问题标题】:program isn't printing my long long variable程序没有打印我的 long long 变量
【发布时间】:2014-01-08 12:07:30
【问题描述】:

我正在尝试使用 C 来解决 Project Euler 上的问题 3。 我对问题中的大整数有问题 - int 和 long 给我一个“溢出”警告,我的程序没有将结果打印到控制台。所以我切换到“long long”类型,警告消失了,但控制台仍然没有打印答案,这让我觉得我的代码有错误。

#include <stdio.h>

int main()
{
long long largest=0;
long long div=2;
long long i = 600851475143;

while(div<i)
{
    if(i%div == 0)
    {
    largest=div;
    }
    div++;
}
printf("%I64d\n", largest);
return 0;
}

我在 Windows 7 上使用 Mingw 作为编译器。

【问题讨论】:

  • 是什么都没有打印,还是错了,如果是后者,应该打印什么,打印什么?
  • 你试过用双打代替吗?
  • 这与您的编译器没有任何关系(GCC 是一个“独立实现”,这意味着(大致)它没有标准库)但与您的 libc(标准库),其中定义了printf

标签: c variables printf format-specifiers


【解决方案1】:

代码没问题..只是运行时间太长。下面的代码打印出了步骤。

while(div<i)
{
  printf("%lld\n",div);
  if(i%div == 0)
  {
  largest=div;
  }
  div+=1;
}

根据算法点,我建议您初始化 div = 600851475143/2 并倒数

【讨论】:

    【解决方案2】:

    使用%lld 打印long long int 类型的数据。

    printf("%lld\n", largest)  
    

    或将格式说明符中的I 更改为l

    【讨论】:

    • mingw 将链接到 win32 运行时/SDK,它将愉快地接受 %I64d,只有较新版本的 SDK 知道 %lld
    • @nos;仔细看,OP没有用l,而是用I
    • @haacks 是的,%I64d 对于 win32 是正确的。操作数为 600851475143,这将需要 相当 一段时间,因此问题很可能是他的循环没有终止。
    【解决方案3】:

    试试%ll,效果会很好

    printf("%ll\n", largest);
    

    【讨论】:

      【解决方案4】:

      请使用%lld 作为格式说明符。更多信息请参考link

      【讨论】:

        【解决方案5】:
        #include <stdio.h>
        
        int main()
        {
        long long largest=0;
        long long div=2;
        long long i = 600851475143;
        
        while(div<i)
        {
            if(i%div == 0)
            {
                 largest=div;
                 break;//out of loop
                 printf("%lld\n", largest);//or add this ,I don't think so
            }
            div++;
        }
        printf("%lld\n", largest);
        return 0;
        }
        

        也许这就是你想要的,也许不是……

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-13
          • 2021-05-19
          • 2012-09-11
          • 1970-01-01
          • 2020-01-22
          • 1970-01-01
          • 1970-01-01
          • 2015-09-15
          相关资源
          最近更新 更多