使用基本算术运算检查一个数字是否为整数

4
我正在尝试创建一个函数来检查一个数字是否为整数。我已经查看了所有其他关于相同问题的线程,唯一的问题是:我正在使用Hopscotch
因此,我只能访问以下运算符:
Addition
Subtraction
Multiplication
Division
Exponents
Square roots
Sin
Cos
Basic Loops, Conditionals, and relational operators.

有没有办法只使用这些来检查一个数字是否为整数?


@jongware 这里的“Decimal”表示在十进制中,floor(number)不等于number。 - Nico A
所以你想要一个不用 modfloor(或 ceil)的整数测试吗?我猜你至少有关系运算符? - BeyelerStudios
@BeyelerStudios 没错。是的,我有关系运算符。 - Nico A
1
@TreFox:你肯定要编辑这个问题。目前它实际上并没有问到你想要的! - Chris
我不知道Hopscotch,但我猜你可以用二分查找:从最小值和最大值开始(即目标下面和上面的某些已知整数值),进行二分查找,直到“max-min == 1”,如果你的目标既不等于最小值也不等于最大值,则说明它是一个非整数。 - BeyelerStudios
显示剩余3条评论
3个回答

4
重复块将把您的数字四舍五入为整数。因此,如果您重复原始数字并增加一个测试数字,您可以在最后检查它们是否相等。

enter image description here

正如其他人所提到的,为使此方法成功,原始数字需要为正数。如果原始数字小于0,则只需将其乘以-1即可解决问题。

enter image description here


哇!没想到我会得到Hopscotch的联合创始人的回答:D感谢您提供实际的Hopscotch代码示例!您介意我在论坛上使用您的方法和图像吗?(并完全归功于您) - Nico A
加油。我喜欢人们在SO上提出Hopscotch问题。 - Samantha John

1

@scottysmalls的答案将需要N步骤,其中N是您的数字。如果N很大,则可能需要太长时间。更快的方法是减去2的幂,这将需要约2*log2N步骤。伪代码如下:

if value < 0 {
    value = -1 * value
}
powerOfTwo = 1
while powerOfTwo < value {
    powerOfTwo = 2 * powerOfTwo
}
while powerOfTwo >= 1 {
    if value > powerOfTwo {
        value = value - powerOfTwo
    }
    powerOfTwo = powerOfTwo / 2
}
if value > 0 {
    value was a decimal
}

0

伪代码:

if value == 0{
    value was zero
}
else if value > 0{
    while value >= 1
       value = value - 1

    if value == 0
        was a positive non-zero integer
    else
        was a positive decimal
}
else {
    while value <= -1
       value = value + 1

    if value == 0
        was a negative non-zero integer
    else
        was a negative decimal
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接