1. 程式人生 > >Leetcode程式設計練習(C++實現)

Leetcode程式設計練習(C++實現)

7、反轉整數

/*
    題目描述: 給定一個 32 位有符號整數,將整數中的數字進行反轉。

    基本思想:
    1、類似於字串的逆置,取x的最低位(個位)數字:pop = x % 10;
    2、求結果: rev = rev * 10 + pop;
    3、將 x 更新為: x = x / 10;
    4、重複1~3步驟,直至 x == 0

    注意:
    1、進行有效性檢查
    2、rev = rev * 10 + pop 可能會導致溢位,因此要對 rev 進行有效性檢查
    a)、當 rev > INT_MAX / 10 或者 rev < INT_MIN / 10時,rev 在更新值後必然溢位;
    b)、當 rev = INT_MAX / 10 時,只有當 pop > 7 才會溢位;
    c)、當 rev = INT_MIN / 10 時,只有當 pop < -8 才會溢位
*/ #include "stdafx.h" #include <iostream> using namespace std; int reverse(int x); int main() { //從控制檯輸入一個整數 cout << "Enter a integer: "; int number; cin >> number; cout << reverse(number) << endl; return 0; } int reverse(int x) { if (x > INT_MAX || x < INT_MIN)
return 0; int rev = 0; while (x != 0) { int pop = x % 10; if (rev > INT_MAX / 10 || (rev == INT_MAX && pop > 7)) return 0; if (rev < INT_MIN / 10 || (rev == INT_MIN && pop < -8)) return 0; rev = rev * 10 + pop; x
/= 10; } return rev; }