You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

在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

火山引擎 最新活动