码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode-7. Reverse Integer

时间:2018-03-24 11:35:11      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:purpose   没有   溢出   inpu   sum   bit   note   turn   flow   

1 题目

Given a 32-bit signed integer, reverse digits of an integer.

给定一个32bit的有符号数,翻转这个数字

Example 1:

Input: 123
Output:  321

 

Example 2:

Input: -123
Output: -321

 

Example 3:

Input: 120
Output: 21

 

Note:
Assume we are dealing with an environment which could only hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

假设你解决问题的环境只能保存32位的有符号数。当溢出的时候返回0.

2 分析

那这个问题就在于判断溢出了。

假设ret 是本次循环之前的数字,y为要添加的数字,那么

ret*10+y就是下次要添加的数字。

那么如果ret*10+y>INT_MAX了,那么就会溢出。

如果溢出了,那么ret%10 就不等于 y了

嗯,思路就是这样,如果溢出,那么取余以后就回不去了

class Solution
{
  public:
    int reverse(int x)
    {
        int result = 0;
        while (x)
        {
            int digit = x % 10;
            int temp = result;
            result = result * 10 + digit;

            // 如果取余以后还能回去,就表明没有溢出
            if ((result - digit) / 10 != temp)
            {
                return 0;
            }
            x = x / 10;
        }
        return result;
    }
};

 

3 总结

思路千千万啊。

直接保存为long long可以,但是貌似要求是只能存储32位的。

 

然后就是上面的思路。

 

其实我自己想的是:

ret*10+y>INT_MAX表示溢出

那么 (INT_MAX-y)/10 <ret也表示溢出。但是会出错。

leetcode-7. Reverse Integer

标签:purpose   没有   溢出   inpu   sum   bit   note   turn   flow   

原文地址:https://www.cnblogs.com/perfy576/p/8637240.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!