您的位置:首页 > 其它

【Leetcode】之Reverse Integer

2015-10-25 11:23 323 查看
题目描述:

Reverse digits of an integer.

Example1: x = 123, return 321

Example2: x = -123, return -321

我的解题思路:

这道题就是一套数学题,给定一个10进制整数,需要先求得个位,十位等各个位的数值,然后把整数给反转一下。这道题的考点应该是在于:int型的存储范围有限,应该如何应对有符号整数溢出的问题。查阅资料,《C++ primer plus》中写到:

C++确保无符号整形在溢出的时候不会出错,如果溢出了,就会将值设定为另一端的取值。

而对于有符号整形,测试了一下,上溢出和下溢出的时候,取值都会成为0x800000000,是最小的负数。本题的求解程序如下:

class Solution {
public:
int reverse(int x) {
int flag=1;
int res=0;
int result=0;
if(x<0)
flag=-1;
unsigned int tmp=x*flag;
int idx=1;int div = 0;
vector<int> store;
div=tmp-pow(10.0,idx);
if(div<0)
return x;
while(div>=0)
{
idx++;
div=tmp-pow(10.0,idx);
}
for(int i=idx-1;i>=0;i--)
{
int curr = tmp/(pow(10.0,i));
store.push_back(curr);
tmp=tmp-curr*(pow(10.0,i));
}
vector<int>::iterator pr;
idx=0;
for(pr=store.begin();pr!=store.end();pr++)
{
res=res+(*pr)*pow(10.0,idx);
idx++;
}
if(res<0)
res=0;
result=res*flag;

return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: