Ruby on Rails函数定义了失败的测试

时间:2015-04-24 23:26:33

标签: ruby-on-rails

我定义了一个接受数字的函数,如果它是a,则返回true 2.否则,返回false:

def is_power_of_two?(num)
  n = 0
  res = false
  if num % 2 == 0
    while 2^n <= num
      if 2^n == num
        res = true
      end
      n += 1
    end 
  end
  puts(n.to_s)
  return res
end

# These are tests to check that your code is working. After writing
# your solution, they should all print true.

puts('is_power_of_two?(1) == true: ' + (is_power_of_two?(1) == true).to_s)
puts('is_power_of_two?(16) == true: ' + (is_power_of_two?(16) == true).to_s)
puts('is_power_of_two?(64) == true: ' + (is_power_of_two?(64) == true).to_s)
puts('is_power_of_two?(78) == false: ' + (is_power_of_two?(78) == false).to_s)
puts('is_power_of_two?(0) == false: ' + (is_power_of_two?(0) == false).to_s)

但是,我的测试结果在五分之四中失败了:

0                                                                                                                                                                                      
is_power_of_two?(1) == true: false                                                                                                                                                     
16                                                                                                                                                                                     
is_power_of_two?(16) == true: false                                                                                                                                                    
64                                                                                                                                                                                     
is_power_of_two?(64) == true: false                                                                                                                                                    
77                                                                                                                                                                                     
is_power_of_two?(78) == false: false                                                                                                                                                   
0                                                                                                                                                                                      
is_power_of_two?(0) == false: true 

打印出的结果似乎符合预期,但测试仍然失败。有谁知道为什么会这样?

3 个答案:

答案 0 :(得分:1)

如果你期望^计算功率那么那就错了^是计算功率使用的XOR **

Column(ArraySet(Integer))

答案 1 :(得分:0)

你总是想检查它是否是2的幂,这样当它不是2的幂时它返回false。

这感觉就像是一个家庭作业问题所以我不会给你确切的答案,但是这应该让你朝着正确的方向前进。

答案 2 :(得分:0)

正如穆罕默德 - 伊布拉姆所说,你正在使用错误的操作员。

插入符号是按位异或操作。所以2^3 == 1(因为十进制2在二进制中是010而十进制3在二进制中是011,并且除了最后一位之外所有位都相同,结果是001或十进制1)。

指数由双星号完成,因此2**3 == 8

以下是对各种运营商的描述。

http://www.tutorialspoint.com/ruby/ruby_operators.htm