在Ruby中不使用取模运算符判断偶数与奇数
不用取模运算符判断偶数和奇数
嘿,这问题挺有意思的!不用%运算符判断奇偶,其实有不少实用的替代方案,下面给你详细讲讲最常用的两种:
方案一:位运算(最推荐,性能最优)
二进制数有个天然特性:偶数的最后一位一定是0,奇数的最后一位一定是1。我们可以利用**按位与运算符&**和数字1做运算——如果结果是0就是偶数,结果是1就是奇数。
实现代码如下:
def even_odd(number) if (number & 1) == 0 puts "Even Number" else puts "Odd Number" end end even_odd(5) # 输出: Odd Number even_odd(4) # 输出: Even Number
原理很直白:number & 1会只保留数字二进制的最后一位,其他位全部置0。比如5的二进制是101,和1(二进制001)按位与后得到1,判定为奇数;4的二进制是100,按位与后得到0,判定为偶数。
方案二:除法反向验证
另一种直观思路是:把数字做整数除法除以2,再把结果乘2,如果和原数相等,说明是偶数(没有余数),否则就是奇数。
代码示例:
def even_odd(number) if (number / 2) * 2 == number puts "Even Number" else puts "Odd Number" end end even_odd(5) # 输出: Odd Number even_odd(4) # 输出: Even Number
这个方法逻辑易懂,但位运算的性能会更优,毕竟位操作是计算机最底层的原生运算。
补充:两种方案对负数也同样适用,比如
-3 & 1结果是1,会被正确判定为奇数,和实际情况一致。
内容的提问来源于stack exchange,提问作者user11992817




