我试图使用C,在项目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作为编译器。
答案 0 :(得分:1)
使用%lld
打印long long int
类型数据。
printf("%lld\n", largest)
或将格式说明符中的I
更改为l
。
答案 1 :(得分:1)
代码没问题。只是运行时间过长。以下代码打印出步骤。
while(div<i)
{
printf("%lld\n",div);
if(i%div == 0)
{
largest=div;
}
div+=1;
}
根据算法点,我建议您初始化div = 600851475143/2
并向后计数
答案 2 :(得分:0)
试试%ll
,它会正常工作
printf("%ll\n", largest);
答案 3 :(得分:0)
请使用%lld
作为格式说明符。有关更多信息,请参阅link
答案 4 :(得分:0)
#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;
}
也许这就是你想要的,也许不是......