/*************************
*水仙花数的实现(C++)
*math.h是C语言的数学库函数
*************************/
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
for(int i=1;i<=9;++i)
for (int j=0;j<=9;++j)
for (int k=0;k<=9;++k){
if (abs((i*100+j*10+k-pow(i*1.0,3)-pow(j*1.0,3)-pow(k*1.0,3)))>1e-6) continue;
cout<<i<<j<<k<<"\n";
}
return 0;
}
/**************************************
不能出水仙花的原因就是判断那句:
if (i*100+j*10+k-pow(i,3)-pow(j,3)-pow(k,3)) continue;
有两个错误:
第一个pow(double,double),pow(float,float),你提供的是pow(int ,int),系统不知道该匹配哪一个???
第二pow返回的是double,你用if(double)???对于if(double==0)这种判断是不对的,假设是if(5-4.999999),因为5在double里很有可能就是用4.99999来表示的。由于精度的原因,所以应该是if(abs(double)<Exp),也就是if(|5-4.999999|<0.0001),两个数绝对值小于精度,这样来判断相等,改进如上
***************************************/
参考资料:华为编程规范