Ruby 反整数

Ruby 反整数,ruby,Ruby,我试图反转整数的位数:123456=>654321,我能想到的最佳解决方案是123456.to_.reverse.to_I。我觉得这是太多的代码。有人有比这更好的方法吗?这里有另一种不转换字符串的方法 x = 12345 y = 0 while x > 0 do y = y*10 y = y + (x%10) x = x/10 puts y end 这个算法也可以在很多面试中被问到……不管你用哪种语言……这个逻辑都是一样的。 上面使用Ruby

我试图反转整数的位数:
123456=>654321
,我能想到的最佳解决方案是
123456.to_.reverse.to_I
。我觉得这是太多的代码。有人有比这更好的方法吗?

这里有另一种不转换字符串的方法

x = 12345
y = 0

while x > 0 do
    y = y*10
    y = y + (x%10)
    x = x/10 

  puts y      
end
这个算法也可以在很多面试中被问到……不管你用哪种语言……这个逻辑都是一样的。 上面使用Ruby的示例这是一个非常“代码高尔夫”式的答案,我不建议用真正的代码来编写

但是,您可以通过以下方式在答案上多刮一个字符:

123456.to_s.reverse.to_i
123456.digits.join.to_i
编辑:

或者(同样,仅作为“代码高尔夫”答案!!)如果您很乐意以
字符串而不是
整数来结束,您可以使用以下选项使此分类器更均匀:

123456.digits*''  #=> "654321"

我们可以在如下所示的对象级别实现这一点

class Integer
  def reverse
    number = self
    reversed = 0
    reversed, number = (reversed*10 + number % 10), number / 10 until number == 0
    reversed
  end
end

p 1234.reverse => 4321

一般来说,我认为只有两种方法可以实现这一目标:

一,

二,。转换为str,反转,转换回(你这样做了)

计算机内存是二进制的,所以它不知道十进制(我希望这是正确的词)数字,所以您需要“引入”它们。

在Javascript中反转整数的数字 解决方案 输入示例 输出
我不认为你能在这方面有所改进。这是一个不同寻常的转变。只有选择了整数的字符串形式,它才有意义。注意,您丢失了结尾
0
s(因为它们以相反的形式变成前导零,对于整数来说,这是它们如何显示的属性,而不是数据固有的)。对于这项不那么简单的任务,您发现18个字母的代码太多了吗?:)不是更短,而是更快:
def reverse(n)r=0;r、 n=(r*10+n%10),n/10而n!=0;   r end
@NeilSlater u刚刚帮助我防止了一个大的生产问题,这可能是由于失去了end
0的
:)@darek nedza看到差异可能不是很明显,但它确实随着n的增加而增加。
n = whatever
result = 0
while n > 0
  d, m = n.divmod(10)
  result = result * 10 + m
  n = d
end
var reverse = function(x) {
  let result = 0
  while (x) {
    result = result * 10 + x % 10
    x = x / 10 | 0
  }
  return Math.abs(result) > 2147483647 ? 0 : result
};
console.log(reverse(-1254))
-4521