题目描述 给定一个一位32位的有符号整数,将这个整数上每一位数字进行反转,并把int类型的结果返回。
实例
输入: -321 返回值: -123思路 首先,输入的整数有可能为负数。但由于c++里取模运算的特点(数学上:对一个负数取模,结果是正数,但在c++里,对一个负数取模,结果仍为负数),这种看似“不合理”的特点,在这道题里反而使得代码更加简洁。接着,依次获得整数上每一位。 对整数x取模,就能得到个位上的数字。接着x /= 10,把个位去掉。之后,再进行取模运算,就能得到百位上的数字。以此类推。用res = 0变量表示反转后的结果,每次循环执行res = res * 10 + x % 10操作。当x变为0时,循环停止,将res值返回.
C++代码 需要注意因为x的范围是有限,因此当我们反转x的时候,最终的结果可能会超过INT_MAX。为了方便起见,将res的类型设为long long类型。倒数第二段代码是leetcode上的要求:当res的值超过int的范围时,return 0.
class Solution { public: int reverse(int x) { typedef long long LL; //bool is_minus = false; LL res = 0; while(x) { res = res * 10 + x % 10; x /= 10; } if(res > INT_MAX || res < INT_MIN) return 0; return res; } };