7.整数反转
题目描述:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
具体代码及思路:
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
class Solution {
public:
int reverse(int x) {
int max = pow(2, 31) - 1;
long min = pow(2, 31);
long cal=x; // 防止该数反转溢出,故我们提前使用long来存储该数字
int flag1 = 1,flag2=0; // flag1判断是否为正数,flag2判断反转是否溢出
if (x < 0) { // 为方便计算,我们把数据都转化为正数
flag1 = 0;
cal*=-1;
}
if(x==0) // 如果数据本身为0
{
return 0;
}
long re=0;int ten=10; // re为反转后的结果
while (cal>0) //反转该数
{
int i =cal%10; cal=cal/10;
re = re*10+i;
}
if((flag1==1 && re>max ) ||(flag1==0 && re>min)) // 溢出
{flag2=1;return 0;}
if(flag1==0) re*=-1; // 如果本来为负数
return re;
}
}