例如:
8 > 10 = true
,因为8可以被2整除3次而10只可以整除一次。
如何比较任何数字范围内的两个整数?模数和除法运算符是否能够完成此任务?
答案 0 :(得分:4)
使用二进制计算来判断它
def devided_by_two(i)
return i.to_s(2).match(/0*$/).to_s.count('0')
end
要将整数除数设为2,只需将其转码为二进制,并判断平均数的结尾有多少零。我认为我提供的代码可以更简单。
答案 1 :(得分:1)
是的,他们有能力。一个数字即使,当你将它除以2时,余数为零。
因此,你可以使用一个循环来连续除以2,直到你得到一个奇数,并计算你做了多少次。
(伪代码)函数,用于将" divisibility分配为2,连续"数字的值将类似于:
def howManyDivByTwo(x):
count = 0
while x % 2 == 0:
count = count + 1
x = x / 2 # make sure integer division
return count
那不应该太很难变成Ruby(或任何程序类型的语言,真的),例如:
def howManyDivByTwo(x)
count = 0
while x % 2 == 0
count = count + 1
x = x / 2
end
return count
end
print howManyDivByTwo(4), "\n"
print howManyDivByTwo(10), "\n"
print howManyDivByTwo(11), "\n"
print howManyDivByTwo(65536), "\n"
输出正确的:
2
1
0
16
敏锐的读者会注意到该功能中存在边缘情况,您可能不想想尝试将零传递给它。如果它是生产代码,你需要抓住它并采取智能行动,因为你可以将零除以2直到奶牛回家,而不会达到奇数。
您返回的零值取决于您未详细说明的需求。理论上(数学上),你应该返回无穷大,但我会把它留给你。
答案 2 :(得分:1)
请注意,如果重新定义这样的基本方法,您可能会弄乱大部分代码。知道了,这就是它的完成方式:
class Integer
def <=> other
me = self
return 0 if me.zero? and other.zero?
return -1 if other.zero?
return 1 if me.zero?
while me.even? and other.even?
me /= 2
other /= 2
end
return 0 if me.odd? and other.odd?
return -1 if me.odd?
return 1 if other.odd? # This condition is redundant, but is here for symmetry.
end
end