题目描述:
给定一个 32 位有符号整数,将整数中的数字进行反转。
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−2^21, 2^31−1]。根据这个假设,如果反转后的整数溢出,则返回 0。
示例:
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
我提交的代码:
class Solution {
public:
int reverse(int x) {
bool symbol = 1; //默认x为正数
int remainder; //余数
std::vector<int> numVec; //存放每一位上的数字
if (x == 0) //0作为特殊处理
return 0;
if (x < 0) //负数取余特殊,直接转成正数
{
x = abs(x);
symbol = 0;
}
for(; x != 0; )
{
remainder = x % 10;
numVec.push_back(remainder);
x = x / 10;
}
int vector_size = numVec.size();
int i;
double rslt = numVec[vector_size - 1]; //这里要设置为double,不然后面会溢出
for (i = 0; i < vector_size - 1; i++)
{
int j = vector_size - i - 1;
rslt = rslt + numVec[i] * pow(10,j);
}
if (symbol == 0)
{
rslt *= -1;
}
if(rslt > pow(2,31) - 1 || rslt < (-1 * pow(2,31)))
{
rslt = 0;
}
return rslt;
}
};
代码运行时间:16ms。大概75.71% 的用户。