【发布时间】:2014-11-26 04:13:43
【问题描述】:
我正在编写一个程序来检查给定数字是否具有整数立方根。 这是我的代码:
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main(int argc, char const *argv[])
{
double m;
int c=0;
int i;
for(i=2;i<=1000000;i++)
{
m = pow(i,(1./3.));
if(m-(int)m == 0)
{
c++;
}
}
cout<<c<<endl;
}
这里c 存储具有整数立方根的数字的数量。我的代码的问题是它总是给出两个作为答案,而答案应该大于两个,因为有很多数字,比如 8,64,27,...
我想知道为什么我得到的结果是两个。我无法捕捉到错误!
【问题讨论】:
-
为什么要包含
<cstdio>? -
在使用浮点运算时检查相等性很少是一个好主意。相反,将计算出的根四舍五入到最接近的整数,然后检查它是否确实是立方根。当然,这暗示了您当前设计的一种更有效的替代方案。
-
@SurayansTiwari
m - (int)m由于浮点错误,可能类似于0.00000000001,即使对于似乎是整数m的东西,你已经完成了。 -
最好使用乘法而不是
pow,而且它也更快,因为您只需检查少于 100 个值