Reverse Integer

Reverse digits of an integer.

Example1: x = 123, return 321

Example2: x = -123, return -321


这个题第一眼看上去比较简单,直接写出如下代码

int reverse(int x) {
        if(x == 0)
            return x;
        int p = x > 0? 1:-1;
        x = x > 0? x:-1*x;
        int res = 0;
        while(x){
            int k = x % 10;
            res = res * 10 + k;
            x /= 10;
        }
        return res*p;
    }

但是WA了,题目有挺多坑的,要求数据必须是在32位int范围内,超过了也要输出0,好像不能用long long,然后我果断直接用字符串存储,将无符号的0取反后右移一位得到max_int。

int reverse(int x) {
        if (x == 0) {
            return x;
        }
        unsigned int temp = x > 0? x:(-1*x);
        unsigned int zero = 0;
        unsigned maxint = (~zero)>>1;
        string s1, s2;
        while (maxint) {
            s1 += maxint % 10 + '0';
            maxint /= 10;
        }
        for(int i = 0, j = s1.size()-1; i < j; i++, j--){
            char c = s1[i];
            s1[i] = s1[j];
            s1[j] = c;
        }
        while (temp) {
            s2 += temp%10 + '0';
            temp /= 10;
        }
        if(s2.size() > s1.size())
            return 0;
        else if(s2.size() == s1.size()){
            if(s2 > s1)
                return 0;
        }
        int res = 0;
        for(int i = 0; i < s2.size(); i++)
            res = res*10 + (s2[i]-'0');
        if(x > 0)
            return res;
        else
            return -1 * res;
    }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值