LeetCode 7 Reverse Integer

整数反转,原题描述见官网

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

#include <stdio.h>
#include <limits.h>

int reverseInt(int x) {

    if (x > INT_MAX || x < INT_MIN)
        return 0;
    
    int res = 0;
    while (x) {
        res = res * 10 + x % 10;
        x = x / 10;
    }
    return res;
}

int main() {
    int num = -123456;
    printf("%d\n", reverseInt(num));
    return 0;
}

这里有两个注意点:

  • 不要溢出了,所以用到了 INT_MAX 和 INT_MIN
  • 在 while 循环里,一开始用 res 存储中介值,也就是余数,最后返回 res 就是转换后的值
    • 第一次循环时 res = -0*10 + 6 = -6
    • 第二次循环时 res = -6*10 + 5 = -65
    • 第三次循环时 res = -65*10 + 4 = -654
    • 第四次循环时 res = -654*10 + 3 = -6543
    • 第五次循环时 res = -6543*10 + 2 = -65432
    • 第六次循环时 res = -65432*10 + 1 = -654321
上一篇:求最大公约数伪代码


下一篇:每日一道Leetcode - 剑指 Offer 58 - I. 翻转单词顺序 【字符串】