7. Reverse Integer

题目简介:
给一个整型数,将它逆置过来:

Example 1:

Input: 123
Output:  321
Example 2:

Input: -123
Output: -321
Example 3:

Input: 120
Output: 21

思路:

  1. 如果该数后面是连续的0,逆置过来没有0,由于逆置之后也是数字,打印出来不会显示。
  2. 考虑到整型逆置溢出的问题,有符号整数的范围为-2147483648~2147483648,考虑到2000000009,逆置之后变为9000000002,已经超出范围。

自己的思路:感觉虽然做出来了,但是代码看起来不美观。

class Solution {
public:
    int reverse(int x) {
        bool flag = false;

        //判断是否为负数
        if(x < 0)
            flag = true;
        //如果是负数,先变为正数
        if(flag)
            x = 0 - x;

        //考虑溢出用long来存储逆置后的数
        long y = 0;
        while(x > 0)
        {
            y = y*10 + x %10;
            x /= 10;
        }
        //判断是否超过整型表示的最大值
        if(y > INT_MAX)
            return 0;
        //如果X为负数,则转化为负数输出
        if(flag)
            y = 0 - y;
        return y;
    }
};

网上参考答案:比我的代码精美的多~

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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值