DEV C++编译器下要用pow函数需要什么样的头文件啊

for(int i=1;i<=9;++i)
for (int j=0;j<=9;++j)
for (int k=0;k<=9;++k){
if (i*100+j*10+k-pow(i,3)-pow(j,3)-pow(k,3)) continue;
cout<<i<<j<<k<<"\n"; }
这个怎么在dev下就是出不来水仙花数啊
还是不行啊
答案都试过了,还是不行啊

/*************************
*水仙花数的实现(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),两个数绝对值小于精度,这样来判断相等,改进如上
***************************************/

参考资料:华为编程规范

温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-03-10
pow函数不可以接受int型的值,改后的是这样的:
#include <iostream>
#include <math.h>
using namespace std;
void main()
{
for(float i=1;i<=9;++i)
for (float j=0;j<=9;++j)
for (float k=0;k<=9;++k)
{
if (i*100+j*10+k-pow(i,3)-pow(j,3)-pow(k,3))
continue;
cout<<i<<j<<k<<"\n";
}
}
//float,double,long double都可以。
第2个回答  2009-03-10
和在TC下一样,是:
#include<math.h>

要是采用C++风格的,是:
#include<cmath>

对“问题补充”的回答:
因为C里面的pow()函数返回值是double型,因为计算机表示浮点数会有误差的原因,导致在把一个int与一个float或double做相等比较时得不到正确的结果,所以把你的程序稍作修改即可:
if(i*100+j*10+k-(int)(pow(i,3)+pow(j,3)+pow(k,3)) continue;
第3个回答  2009-03-10
<math.h>
相似回答