皆さん こんばんは。

今天不爽,做了两个题。不过第二个题(也就是这个题)看起来非常简单。题目意思就是把一个int型的数反过来。比如321就要返回123,-321就要返回-123。

刚拿到题目的时候就想这有什么难的?遍历一遍数字不就完了么。后来发现还是有一些边界情况要考虑的。

比如当输入是-2147483648根本就不能先把它变成正整数,不然就溢出了,这时候特判一下直接返回0(尼玛提交了一次错误答案我才知道如果溢出要返回0啊),另外就是如果在计算过程中有溢出也要返回0,好了讲完了,看代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int reverse(int x) {
if(x == -2147483648) return 0;
long long INTMAX = 2147483647;
long long ans = 0;
int symbol = 1;
if(x < 0){
symbol = -1; x = -x;
}
while(x){
ans = ans*10+x%10;
if(ans > INTMAX) return 0;
x = x/10;
}
ans *= symbol;
return ans;
}

好了就是这样。おやすみなさい。