我定义了一个接受数字的函数,如果它是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
打印出的结果似乎符合预期,但测试仍然失败。有谁知道为什么会这样?
答案 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
以下是对各种运营商的描述。