整数反转(Leetcode 简单)
题目描述:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例1:
输入: 123
输出: 321
示例2:
输入: -123
输出: -321
示例3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
分析:
首先要知道这个题的逆序算法:
把最后的一个数字相继的提出然后通过依次的乘十累加还原逆序数。
213 取 3;010+3=3;
21 取 1, 310+1=31;
2 取 2, 31*10+1=312。
这里注意设定的余数和累加数的数据类型,防止溢出。最后按照题目要求把溢出的逆序数输出为0即可。
答案:
#include<iostream>
using namespace std;
class Solution {
public:
int reverse(int x) {
long temp = 0, sum = 0; // 题目的范围就是 int 的范围,所以设成 long 防止溢出
while (x != 0) {
temp = x % 10; // 取余,即最后一位
sum = sum * 10 + temp; // 每次加一个数字,就要把上次累加的数字进一位,保证先累加的最高
x = x / 10; // 去掉最后一位
}
if (sum >= INT_MAX || sum <= INT_MIN) // 溢出情况
sum = 0;
return sum;
}
};
int main() {
int x;
cin >> x;
Solution a;
cout << a.reverse(x);
return 0;
}