leetcode7 整数翻转(对于整数数位操作的简洁算法)

【题目描述】

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321
 示例 2:

输入: -123
输出: -321
示例 3:

输入: 120
输出: 21
注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

【题解】

颠倒正负存在新的数里,要从原来的数最后一位开始在新数里累加

即是 += x % 10

处理完第一个数,之后要处理第二位,也就是x % 100,如果加入循环,则循环条件设置为:

扫描二维码关注公众号,回复: 10362009 查看本文章

x / 10

对于返回的整型re,每一次放入一个新的数时,原来的数左移一位,也就是:

re * 10

对于溢出的判断我一开始的想法是直接让int溢出,溢出之后re值正负颠倒,此时只需要判断原本X的值正负与re不同即可

可是leetcode它报错!!!它不让我自然溢出!!!

好的我向平台低头

接下来就是把re设置成long int 判断是否大于2^31 - 1或者小于-2^31 + 1

1 int reverse(int x){
2     long int re = 0;
3     for(; x; x /= 10)
4         re = re * 10 + x % 10;
5     if (re > 2147483647 || re < -2147483648)
6         return 0;
7     else
8         return re;
9 }

代码如上

执行结果:
通过
执行用时 :0 ms, 在所有 C 提交中击败了100.00%的用户
内存消耗 :5.9 MB, 在所有 C 提交中击败了100.00%的用户

我是一个菜鸟程序员,我从最简单的简单题慢慢做起,它虽然简单,但我每一道都要做到最好

猜你喜欢

转载自www.cnblogs.com/jhjgarden/p/12610044.html