给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围[−2^31, 2^31− 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
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reverse-integer
#include <stdio.h>
#include <math.h>
#include <stdint.h>
#include <stdlib.h>
#define MAX_LENGTH 10
int reverse(int x) {
int isFl = 0;
if (x < 0) { isFl = 1; }
int64_t num = llabs(x);
if (num == 0 || num > 2147483647) { return 0; }
int xLen = (int) log10((double_t) num) + 1;
printf("%d\n", xLen);
int y[MAX_LENGTH] = {};
for (int i = xLen; i > 0; --i) {
int64_t z = num / (int) pow(10, i - 1);
num = num - (z * (int) pow(10, i - 1));
y[xLen - i] = (int) z;
}
int64_t temp = 0;
for (int m = xLen; m > 0; --m) {
// printf("%lld\t", y[m - 1]);
temp = temp + y[m - 1] * (int64_t) pow(10, m - 1);
// 环境不允许有64位整数,则需要判断长度为10的数字最后一位是不是大于2,不写了,先用64位测试
// printf("temp: %lld\n", temp);
if (temp > 2147483647) { return 0; }
}
if (isFl == 1) {
temp = 0 - temp;
}
return (int) temp;
}
int main() {
// 需要注意int太大时,比如长度为10的数字最后一位是9,会提示 Implicit conversion from 'long long' to 'int' changes value from 9000787897 to 410853305
int res = reverse(2147483644);
printf("the res is: %lld", res);
}
评论区