以最有效的方式检查数字是否为 5 的倍数

Check if number is multiple of 5 in most efficient way

信息

大家好 我正在寻找一种有效的方法来检查数字是否是 5 的倍数。所以我在 google 上搜索并在 geeksforgeeks.org.

上找到了 this 解决方案

我的问题有 3 个解决方案。

  1. 第一个解决方案是减去 5 直到达到零,
  2. 第二种解决方案是将数字转换为字符串并检查最后一个字符是 5 还是 0,
  3. 第三个解决方案是在按位级别上进行一些有趣的操作。

我对第三种解决方案很感兴趣,因为我可以完全理解第一种和第二种。

这是来自 geeksforgeeks 的代码。

bool isMultipleof5(int n) 
{ 
    // If n is a multiple of 5 then we
    // make sure that last digit of n is 0
    if ( (n & 1) == 1 )
        n <<= 1;

    float x = n;
    x = ( (int)(x * 0.1) ) * 10;

    // If last digit of n is 0 then n
    // will be equal to (int)x
    if ( (int)x == n )
        return true;
    return false;
}

我只理解了部分逻辑。我什至没有测试过这段代码。所以我需要了解它才能自由使用。

如上述文章所述,如果设置了最后一位,则此函数将数字乘以 2,然后检查最后一位是否为 0,在这种情况下 returns 为真。但是在检查数字的二进制表示后,我感到困惑,因为在任何奇数的情况下最后一位是 1,而在任何偶数的情况下最后一位是 0。所以...

实际问题是

这个函数的逻辑是什么?

如有任何答复,我们将不胜感激!

谢谢大家!

  1. 检查一个数是否是 5 的倍数的最直接的方法就是
if (n % 5 == 0) {
    // logic...
}

位操作代码的作用是:

  1. 如果数字是奇数,则将其乘以二。请注意,对于 5 的倍数,个位数将以 0 或 5 结尾,将数字加倍将使其以 0 结尾。
  2. 我们创建一个设置为 n 的数字 x,但个位设置为 0。(我们通过将 n 乘以 0.1 来删除个位,然后乘以 10 以添加一个 0,其总效果只是将个位更改为 0)。
  3. 我们知道,最初如果n是5的倍数,在第一步之后它的个位是0。所以我们检查x是否等于它,如果是,那么我们可以说n是5 的倍数。