寻找阿姆斯特朗数,n=3时程序无法输出407(DEVC++上不行,但homework提交平台可以出现)
#include <stdio.h>
#include <math.h>
int main()
{ int i=1, f, q=0;
double n6, n5, n4, n3, n2, n1, n, x;
//寻找阿姆斯特朗数
scanf("%lf", &n);
x=pow(10,n-1);
for (f=x; f<10*x; f++)
{ n6=f%10;
n5=f/10%10;
n4=f/100%10;
n3=f/1000%10;
n2=f/10000%10;
n1=f/100000%10;
if (f == pow(n1,n) + pow(n2,n) + pow(n3,n) + pow(n4,n) + pow(n5,n) + pow(n6,n))
{ printf("%d\n", f);
q=1;
}
}
if (q==0) printf("No output.\n");
return 0;
}
调试f=407的情况,并输出pow(n1,n)到pow(n6,n)的结果均为正确,
407本身也应该是满足条件的,但调试时407无法通过if语句,最终结果无法出现407(DEVC++上不行,但homework提交平台可以出现)
1.单独尝试pow(0,3)发现结果为0,好像确实不严谨但并没有出错
2.改用以下程序,能够输出407
#include <stdio.h>
#include <math.h>
int main()
{ int i=1, f, q=0;
double n6, n5, n4, n3, n2, n1, n, x, y;
scanf("%lf", &n);
x=pow(10,n-1);
for (f=x; f<10*x; f++, y=0)
{ n6=f%10;
n5=f/10%10;
n4=f/100%10;
n3=f/1000%10;
n2=f/10000%10;
n1=f/100000%10;
if (n1>0) y+=pow(n1,n);
if (n2>0) y+=pow(n2,n);
if (n3>0) y+=pow(n3,n);
if (n4>0) y+=pow(n4,n);
if (n5>0) y+=pow(n5,n);
if (n6>0) y+=pow(n6,n);
if (f==y)
{ printf("%d\n", f);
q=1;
}
}
if (q==0) printf("No output.\n");
return 0;
}
请问为什么会出现这样的问题呢?有点好奇原理
谢谢解答~
可能跟pow函数的返回值是浮点数有关。浮点数精度误差导致不能用==直接判断相等