题目大意:给定一个整型(即int),将它的数位反过来,如321变为123,-321变为-123.

关键字:编程能力

题目描述

Reverse digits of an integer.

Example1: x = 123, return 321

Example2: x = -123, return -321

解法

如题目后附带的提示所说,这道题本身并不难,难得在于对于特殊情况的考虑和处理。

特殊情况有2种,其一是前导0的问题,如果给定的数字最后位数是若干个0,那么在返回的时候注意不要有前导0,当然因为返回的本身就是数字也没办法有前导0,这里应该是出题的时候考虑是输出到屏幕的原因。

而另一种则是溢出的问题,int类型只能表示范围在[-2147483648, 2147483647]的数字,如果输入是1000000003的话,就无法返回3000000001作为答案,根据题目的要求,此时应当返回0。

在考虑了这两种情况之后,就可以很好的解决这个问题。

class Solution {
public:
    int reverse(int x) {
        // 先分离出x的数值部分和符号部分
        int y = abs(x), z = x == y ? 1 : -1;
        // 将y反向放于一个long中,这样可以避免越界
        long tmp = 0;
        while (y) {
            tmp = tmp * 10 + y % 10;
            y /= 10;
        }
        // 判断是否越界
        if (z*tmp > INT_MAX || z*tmp < INT_MIN) return 0;
        // 否则返回翻转后的值
        return z*tmp;
    }
};

登录发表评论 注册

反馈意见