Reverse Interger笔记——对于整型溢出的处理

最近开始刷leetcode。有些看起来很简单的题目做起来才发现要处理每种情况,每种异常,还是很费脑筋的,而且做过之后容易忘记。于是我决定在博客中记录一些解题思路,加深印象,举一反三。

算法第七题,Reverse Integer,题目如下。

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

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.

原理很简单,不再赘述。但有一点需要积累的是对整型溢出的处理。我是这么处理的。若可能存在溢出的情况(即待处理的整型达到了十位),则调用一个check函数进行一个验算,函数如下。

函数的作用是逐位检查反转后的整数与原整数的差异。若发生溢出,则结果必然不正确。

另外我们再来学习一下整型相加溢出和相乘溢出的判断。

整型相加溢出的判断方法这里贴两个。

方法一

比较直观。整型溢出只会发生在两个加数都为正或者都为负的情况。单独把这两种情况拿出来判断就好。

方法二

相乘溢出的判断

思路是验算一遍,用结果除以其中一个乘数,看看是否等于另一个乘数。

当然如果结果用64位表示,则不会发生溢出。

发表评论

电子邮件地址不会被公开。 必填项已用*标注