Leetcode程式設計練習(C++實現)
阿新 • • 發佈:2018-10-31
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; }