侧边栏壁纸
  • 累计撰写 35 篇文章
  • 累计创建 14 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

[数据结构与算法]翻转数字

子曰
2023-07-13 / 0 评论 / 0 点赞 / 486 阅读 / 421 字 / 正在检测是否收录...

给你一个 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);
}
0

评论区