以最有效的方式检查数字是否为 5 的倍数
Check if number is multiple of 5 in most efficient way
信息
大家好
我正在寻找一种有效的方法来检查数字是否是 5 的倍数。所以我在 google 上搜索并在 geeksforgeeks.org.
上找到了 this 解决方案
我的问题有 3 个解决方案。
- 第一个解决方案是减去 5 直到达到零,
- 第二种解决方案是将数字转换为字符串并检查最后一个字符是 5 还是 0,
- 第三个解决方案是在按位级别上进行一些有趣的操作。
我对第三种解决方案很感兴趣,因为我可以完全理解第一种和第二种。
这是来自 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。所以...
实际问题是
这个函数的逻辑是什么?
如有任何答复,我们将不胜感激!
谢谢大家!
- 检查一个数是否是 5 的倍数的最直接的方法就是
if (n % 5 == 0) {
// logic...
}
位操作代码的作用是:
- 如果数字是奇数,则将其乘以二。请注意,对于 5 的倍数,个位数将以 0 或 5 结尾,将数字加倍将使其以 0 结尾。
- 我们创建一个设置为 n 的数字 x,但个位设置为 0。(我们通过将 n 乘以 0.1 来删除个位,然后乘以 10 以添加一个 0,其总效果只是将个位更改为 0)。
- 我们知道,最初如果n是5的倍数,在第一步之后它的个位是0。所以我们检查x是否等于它,如果是,那么我们可以说n是5 的倍数。
信息
大家好 我正在寻找一种有效的方法来检查数字是否是 5 的倍数。所以我在 google 上搜索并在 geeksforgeeks.org.
上找到了 this 解决方案我的问题有 3 个解决方案。
- 第一个解决方案是减去 5 直到达到零,
- 第二种解决方案是将数字转换为字符串并检查最后一个字符是 5 还是 0,
- 第三个解决方案是在按位级别上进行一些有趣的操作。
我对第三种解决方案很感兴趣,因为我可以完全理解第一种和第二种。
这是来自 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。所以...
实际问题是
这个函数的逻辑是什么?
如有任何答复,我们将不胜感激!
谢谢大家!
- 检查一个数是否是 5 的倍数的最直接的方法就是
if (n % 5 == 0) {
// logic...
}
位操作代码的作用是:
- 如果数字是奇数,则将其乘以二。请注意,对于 5 的倍数,个位数将以 0 或 5 结尾,将数字加倍将使其以 0 结尾。
- 我们创建一个设置为 n 的数字 x,但个位设置为 0。(我们通过将 n 乘以 0.1 来删除个位,然后乘以 10 以添加一个 0,其总效果只是将个位更改为 0)。
- 我们知道,最初如果n是5的倍数,在第一步之后它的个位是0。所以我们检查x是否等于它,如果是,那么我们可以说n是5 的倍数。