DEV C++编译器下要用pow函数需要什么样的头文件啊
for(inti=1;i<=9;++i)for(intj=0;j<=9;++j)for(intk=0;k<=9;++k){if(i*100+j*10+k-pow(i,3)...
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下就是出不来水仙花数啊
还是不行啊
答案都试过了,还是不行啊 展开
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下就是出不来水仙花数啊
还是不行啊
答案都试过了,还是不行啊 展开
4个回答
展开全部
/*************************
*水仙花数的实现(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),两个数绝对值小于精度,这样来判断相等,改进如上
***************************************/
*水仙花数的实现(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),两个数绝对值小于精度,这样来判断相等,改进如上
***************************************/
参考资料: 华为编程规范
展开全部
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都可以。
#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都可以。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
和在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;
#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;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
<math.h>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询