1. 程式人生 > >【Leetcode】之Reverse Integer

【Leetcode】之Reverse Integer

題目描述:
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; } };