记录一道比较简单的题目,整数反转
题目意思:将一个int类型的数字反转,符号不变
普通
思路:获得符号,将提取出每一位数字,接到答案上,最后输出即可。直接用大类型存储,同时要判断答案的数字是否超过int类型,如果超过返回0即可。
进阶:不能用long存储。
思路
依旧一位一位取数字拼接到答案上,
但是当答案大于INT_MAX的1/10的时候要注意不能再拼接了。
如果答案等于INT_MAX的1/10,
那么判断最后一位拼接的数字是否大于7(INT_MAX的最后一位就是7),
如果大于,也不能拼接了。
最后注意,int负数范围比正数大一位,需要特判。
复习知识点: a - b是用补码实现的,相当于 a + ~b + 1。
代码:
class Solution {
public:
int reverse(int x) {
int maxx = INT_MAX ; //个位是7
int boundary = maxx / 10;
int res = 0;
int flag = 1;
if(x == INT_MIN) return 0;
if(x < 0) flag = -1, x = -1 * x;
// res = 2143847412;
while(x != 0)
{
if(res > boundary) return 0;
else if (res == boundary)
{
if(x % 10 > 7) return 0;
}
res = res * 10;
res = res + (x % 10);
5 x = x / 10;
}
return res * flag ;
}
};
附上题目连接:
https://leetcode.cn/problems/reverse-integer/submissions/