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; }