为什么我的 printf 不起作用?
Why my printf does not work?
题目是求600851475143这个数的最大质因数,我的代码是:
#include <stdio.h>
#include <math.h>
int main()
{
float i,x;
float a,y;
for(a=2;a<=600851475143;a++)
{
y=fmod(600851475143,a);
if(y==0)
{
int sum=0;
for(i=2;i<=a/2;i++)
{
if(fmod(a,i)==0)
{
sum=1;
break;
}
}
if(sum==0&&a>x)
x=a;
// printf("%f\n",x );
}
}
printf("%f\n",x );
return 0;
}
为什么我的 printf 函数不起作用?当我把 printf 放在上面时(在评论中显示),它起作用了,但最后一个 printf 不起作用。为什么?
我不认为printf
函数有问题,当你运行程序时,它需要太多时间,所以最后的printf没有运行,你应该选择另一种更快的算法进行优化。
#include <stdio.h>
#include <math.h>
int main()
{
float i,x;
float a,y;
for(a=2;a<=600851475143;a++) // it needs too much time!
{
y=fmod(600851475143,a);
if(y==0)
{
int sum=0;
for(i=2;i<=a/2;i++) // this algorithm is O(N^2)
{
if(fmod(a,i)==0)
{
sum=1;
break;
}
}
if(sum==0&&a>x)
x=a;
printf("%f\n",x );
}
}
printf("%f\n",x ); // needs too much time to go here
return 0;
}
#include <stdio.h>
#include <math.h>
int main()
{
long double i,x, a, y;
for(a=2;a<=600851475143;a++)
{
y=fmod(600851475143,a);
if(y==0)
{
int sum=0;
for(i=2;i<=a/2;i++)
{
if(fmod(a,i)==0)
{
sum=1;
break;
}
}
if(sum==0&&a>x)
x=a;
printf("%Lf\n",x );
//break;
}
}
printf("%Lf\n",x );
return 0;
}
如果没有中断,它会在一个条件下找到一个数字,但会 return 继续寻找另一个。这就是为什么你使用 break 来找到第一个。要查找更多信息,我建议使用 "long double" 数据类型。
这是一个实数浮点类型,通常映射到扩展精度浮点数格式。实际属性未指定。与 float 和 double 类型不同,它可以是 80 位浮点格式、非 IEEE "double-double" 或 IEEE 754 四精度浮点格式(如果提供更高精度的格式),否则与双.
题目是求600851475143这个数的最大质因数,我的代码是:
#include <stdio.h>
#include <math.h>
int main()
{
float i,x;
float a,y;
for(a=2;a<=600851475143;a++)
{
y=fmod(600851475143,a);
if(y==0)
{
int sum=0;
for(i=2;i<=a/2;i++)
{
if(fmod(a,i)==0)
{
sum=1;
break;
}
}
if(sum==0&&a>x)
x=a;
// printf("%f\n",x );
}
}
printf("%f\n",x );
return 0;
}
为什么我的 printf 函数不起作用?当我把 printf 放在上面时(在评论中显示),它起作用了,但最后一个 printf 不起作用。为什么?
我不认为printf
函数有问题,当你运行程序时,它需要太多时间,所以最后的printf没有运行,你应该选择另一种更快的算法进行优化。
#include <stdio.h>
#include <math.h>
int main()
{
float i,x;
float a,y;
for(a=2;a<=600851475143;a++) // it needs too much time!
{
y=fmod(600851475143,a);
if(y==0)
{
int sum=0;
for(i=2;i<=a/2;i++) // this algorithm is O(N^2)
{
if(fmod(a,i)==0)
{
sum=1;
break;
}
}
if(sum==0&&a>x)
x=a;
printf("%f\n",x );
}
}
printf("%f\n",x ); // needs too much time to go here
return 0;
}
#include <stdio.h>
#include <math.h>
int main()
{
long double i,x, a, y;
for(a=2;a<=600851475143;a++)
{
y=fmod(600851475143,a);
if(y==0)
{
int sum=0;
for(i=2;i<=a/2;i++)
{
if(fmod(a,i)==0)
{
sum=1;
break;
}
}
if(sum==0&&a>x)
x=a;
printf("%Lf\n",x );
//break;
}
}
printf("%Lf\n",x );
return 0;
}
如果没有中断,它会在一个条件下找到一个数字,但会 return 继续寻找另一个。这就是为什么你使用 break 来找到第一个。要查找更多信息,我建议使用 "long double" 数据类型。
这是一个实数浮点类型,通常映射到扩展精度浮点数格式。实际属性未指定。与 float 和 double 类型不同,它可以是 80 位浮点格式、非 IEEE "double-double" 或 IEEE 754 四精度浮点格式(如果提供更高精度的格式),否则与双.