我正在尝试实现用户定义的函数,该函数测试数字是否为整数:
#include <iostream>
#include <typeinfo>
using namespace std;
bool integer(float k){
if (k==20000) return false;;
if (k==(-20000)) return false;
if (k==0) return true;
if (k<0) return integer(k+1);
else if(k>0) return integer (k-1);
return false;
}
int main(){
float s=23.34;
float s1=45;
cout<<boolalpha;
cout<<integer(s)<<endl;
cout<<integer(s1)<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
所以我的想法是,如果一个数是一个整数,如果它是负数或正数无关紧要,如果我们减少或增加它,我们必须得到零,但问题是,我们怎样才能创建增减的下界?
ten*_*our 24
#include <cmath>
bool is_integer(float k)
{
return std::floor(k) == k;
}
Run Code Online (Sandbox Code Playgroud)
此解决方案应适用于所有可能的值k.我很确定这是一个你可以安全地比较使用浮动的情况==.
尝试仔细命名功能.integer没有提供任何线索它实际上做了什么,所以我将函数名称更改为更有意义的东西.
对于将来,测试一个数字是否为整数应该感觉就像一个非常简单的操作,所以你应该有一种强烈的感觉,最好的解决方案将非常简单.我希望您认识到您的原始解决方案很荒谬有很多原因(最大的原因:它会导致绝大多数情况下堆栈溢出).
Pau*_*l R 11
为什么不做这样的事情:
bool integer(float k)
{
return k == (float)(int)k;
}
Run Code Online (Sandbox Code Playgroud)
?
(当然可以随意使用正确的C++类型转换.)