整数反转
题目: 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。
输入格式:
输出格式:
输入样例:
输出样例:
示例 1:
**输入:** x = 123
**输出:** 321
示例 2:
**输入:** x = -123
**输出:** -321
示例 3:
**输入:** x = 120
**输出:** 21
示例 4:
**输入:** x = 0
**输出:** 0
提示:
-2^31 <= x <= 2^31 - 1
思路:
逐个分解给出整数的每一位的值,采用对10求余和除以10的方法提取数字的每一位的值,并将其逆序压入新的变量
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #include <bits/stdc++.h> using namespace std;
class Solution { public: int reverse(int x) { long result = 0; long temp = abs(long(x)); for(int i = 1; ; i++){ if(temp == 0) break; long de = pow(10, i); int remainder = temp % de; result = result * 10 + (remainder < 10 ? remainder : remainder / (de / 10) ); temp -= remainder; cout << de << "---" << remainder << "---" << temp << "---" << result << "---" << LONG_MIN << "---" << INT_MAX << endl; } if(x < 0) result = -result; if(result < -INT_MIN || result > INT_MAX) return 0; return int(result); } };
int main(void) { int x = 123 Solution s; cout << s.reverse(x); return 0; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #include <bits/stdc++.h> using namespace std;
class Solution { public: int reverse(int x) { int rev = 0; while (x != 0) { if (rev < INT_MIN / 10 || rev > INT_MAX / 10) { return 0; } int digit = x % 10; x /= 10; rev = rev * 10 + digit; } return rev; } }; 作者:力扣官方题解 链接:https: 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
int main(void) { int x = 123 Solution s; cout << s.reverse(x); return 0; }
|