問題: Reverse Integer
渡される整数を逆にして返せよ。
ルール: 入力値は 32-bit 符号あり整数(32-bit signed integer) でなければいけない。32-bitを超えた場合は、0を返せ。
例)
Example1: x = 123, return 321
Example2: x = -123, return -321
Example3: x = 1534236469, return 0
ヒント)
32-bit整数のサイズはどうやって割り出す?
32-bitのMAX値は 2,147,483,647 で
32-bitのMIN値は -2,147,483,648 だけど、
swiftにはMAXとMIN値を取得する関数がある。
参考:http://www.codingexplorer.com/integers-and-numeric-literals-in-swift/
解答例
この方のJavaコードを参考にしました〜
https://discuss.leetcode.com/user/flyflybird
func reverse(_ x: Int) -> Int {
let maxValue:Int = Int(Int32.max)
let minValue:Int = Int(Int32.min)
let sign = x < 0 ? -1:1
var x = abs(x)
var reversed = 0
while x != 0{
print("\(reversed * 10) + \(x % 10) = \(reversed * 10 + x % 10)")
reversed = reversed * 10 + x % 10
x = x / 10
print(x)
if reversed * sign > maxValue || reversed * sign < minValue {
return 0
}
}
return reversed * sign
}
コンソールログ
入力値が 1534236469 だったとして
print("(reversed * 10) + (x % 10) = (reversed * 10 + x % 10)")
print(x)
が吐き出した内容は以下です!
0 + 9 = 9
153423646
90 + 6 = 96
15342364
960 + 4 = 964
1534236
9640 + 6 = 9646
153423
96460 + 3 = 96463
15342
964630 + 2 = 964632
1534
9646320 + 4 = 9646324
153
96463240 + 3 = 96463243
15
964632430 + 5 = 964632435
1
9646324350 + 1 = 9646324351
0