LeetCode每日一练(7) Reverse Integer C++版

先附上题目:
Given a 32-bit signed integer, reverse digits of an integer.
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.

求解(C++版):
这道题看上去比较简单,但是需要注意的细节和情况的处理还是很多的。
(1) 注意负数
(2)注意10,100这类数字的反转
(3) 最容易忽视的一点,整型的溢出。(2333333339反转超int)
注意我们计算的过程中不需要另外存数字,直接计算就好。处理溢出我们先用long long储存,超int后直接返回0
其实我们发现,(1)和(2)都不需要特殊处理,在运算的过程中会自行处理。

class Solution {  
public:  
    int reverse(int x) {  
        int maxx=0x7fffffff,minn=0x80000000;//int最大值和最小值   
        long long  ans=0;  
        while(x)  
        {  
            ans=ans*10+x%10;   
            if(ans>maxx||ans<minn)//解决溢出(long  long)   
            {  
                ans=0;  
                break;  
            }  
            x/=10;  
        }  
        return ans;  
    }  
};  

这里补充一个知识点:
它的溢出范围(32位有符号整数)是[-214748368,2147483647]

可以算一下 0x7FFFFFFF 是多少
每个十六进制数4bit,因此8位16进制是4个字节,刚好是一个int整型

F的二进制码为 1111
7的二进制码为 0111

这样一来,整个整数 0x7FFFFFFF 的二进制表示就是除了首位是 0,其余都是1
就是说,这是最大的整型数 int(因为第一位是符号位,0 表示他是正数)

用 INT_MAX 常量可以替代这个值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值