【Leetcode】之Reverse Integer
阿新 • • 發佈:2018-12-27
題目描述:
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;
}
};