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
number = 123456778
p 0.then { |ch| (number./(10).tap { |x| ch, number = ch * 10 + (number - x * 10), x } while (number > 0)) || ch }
但这是不可读的。要使它可读:
#!/usr/bin/ruby -w
number = 123
ch = 0
while (number > 0)
div = number / 10
mod = number - div * 10
ch = ch * 10 + mod
number = div
end
p ch
处理负整数:
#!/usr/bin/ruby -w
number = -123
ch = 0
negative = number < 0
number *= -1 if negative
while (number > 0)
div = number / 10
mod = number - div * 10
ch = ch * 10 + mod
number = div
end
ch *= -1 if negative
p ch
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
};
7条答案
按热度按时间xfyts7mz1#
这是一个非常“代码高尔夫”式的回答,我不建议用真实的的代码来编写...
但是,您可以使用以下语句将答案中的一个字符去掉:
或者(同样,仅作为一个“代码高尔夫”答案!!)如果您很高兴最终使用
String
而不是Integer
,您可以使用以下方法使其更加合理:事实上,转换为字符串可能更可取,因为它可以防止丢失零而丢失信息。撇开代码高尔夫的答案不谈,比较一下:
zdwk9cvp2#
下面是另一种不转换字符串的方法......
这个算法也可以在很多面试中被问到......不管你使用哪种语言......这个逻辑都是一样的。上面的例子使用了Ruby
kkih6yb83#
我们可以在对象级别实现这一点,如下所示。
nuypyhwy4#
我认为一般来说只有两种方法可以达到这个目的:
1.
2.转换为str,反转,再转换回来(您已经完成了)。
计算机内存是二进制的,所以它不知道十进制(我希望这是正确的词)数字,所以你需要“介绍”他们。
lrl1mhuk5#
下面是一个快速的一行程序,介绍各种正整数在线竞赛:
但这是不可读的。要使它可读:
处理负整数:
使用
Kernel#then()
和Kernel#tap()
还可以使您将其写在一行中,这是最难看的方式。1tu0hz3e6#
比较2种溶液。
kzmpq1sx7#
在Javascript中将整数的数字反转
溶液
输入示例
输出