整数反转--数论(怎么判断溢出)

class Solution {
   public int reverse(int x) {
        int flag = 1;
        int ans = 0;
        int temp = 0;
        if (x < 0) { // 解决正负 符号位加入运算 现在需要解决的是溢出
            flag = -1;
            x *= -1;
        }
        while (x > 0) {
            temp = x % 10;
            if (ans > Integer.MAX_VALUE / 10 || (ans == Integer.MAX_VALUE / 10 && temp > 7))
                return 0;
            if (ans < Integer.MIN_VALUE / 10 || (ans == Integer.MIN_VALUE / 10 && temp < -8))
                return 0;
            ans = ans * 10 + temp;
            x /= 10;
        }
        return ans * flag;
    }
}

int的取值范围为: -2^31——2^31-1,即-2147483648——2147483647

从ans 10 + pop > MAXVALUE这个溢出条件来看
当出现 ans > MAXVALUE / 10 且 还有pop需要添加 时,则一定溢出
当出现 ans == MAXVALUE / 10 且 pop > 7 时,则一定溢出,7是2^31 - 1的个位数
从ans 10 + pop < MINVALUE这个溢出条件来看
当出现 ans < MINVALUE / 10 且 还有pop需要添加 时,则一定溢出
当出现 ans == MAXVALUE / 10 且 pop < -8 时,则一定溢出,8是-2^31的个位数*

原文地址:https://blog.51cto.com/14429166/2417249

时间: 2024-08-01 19:17:46

整数反转--数论(怎么判断溢出)的相关文章

7.整数反转--数论(怎么判断溢出)

class Solution { public int reverse(int x) { int flag = 1; int ans = 0; int temp = 0; if (x < 0) { // 解决正负 符号位加入运算 现在需要解决的是溢出 flag = -1; x *= -1; } while (x > 0) { temp = x % 10; if (ans > Integer.MAX_VALUE / 10 || (ans == Integer.MAX_VALUE / 10

LeetCode Golang 7. 整数反转

7. 整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. Tips : Math包给出的类型大小的边界: // Integer limit values. const ( MaxInt8 = 1<<7 - 1 MinInt8 = -1 << 7 MaxInt16 = 1<<15 - 1 MinInt16 = -1 << 15 MaxInt32 = 1<<31 - 1 MinInt32 = -1 << 3

C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数

各位相加 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数. 示例: 输入: 38 输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2. 由于 2 是一位数,所以返回 2. 进阶:你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗? 题目地址 https://leetcode-cn.com/problems/add-digits/ 代码模板 public class Solution { public int AddDigits

整数反转

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321  示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1].请根据这个假设,如果反转后整数溢出那么就返回 0. /* * @lc app=leetcode.cn id=7 lang=javascript * * [7] 整数反转 */ /**

leetcode:7. 整数反转

题目描述: 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例: 输入: 123 输出: 321 输入: -123 输出: -321 输入: 120 输出: 21 注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1].请根据这个假设,如果反转后整数溢出那么就返回 0. 思路分析: 这道题是easy,实际上思路是比较简单的,首先用一个数组逆向的存储整数各位,再遍历一次数组,重新构建一遍即可.但是由于这个整数溢出问题,我

Leetcode_07【整数反转】

文章目录: 题目 脚本一及注释 脚本一逻辑 题目: 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123输出: 321 示例 2: 输入: -123输出: -321示例 3: 输入: 120输出: 21注意: 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1].请根据这个假设,如果反转后整数溢出那么就返回 0. 脚本一及注释:[用时:24ms] class Solution: #定义一个类 def r

Leetcode篇:整数反转

@author: ZZQ @software: PyCharm @file: IntReverse.py @time: 2018/9/16 16:36 要求:整数反转(给定一个 32 位有符号整数,将整数中的数字进行反转) e.g.: 输入: 123 输出: 321 输入: -123 输出: -321 输入: 120 输出: 21 [假设我们的环境只能存储 32 位有符号整数,其数值范围是 [?2^31, 2^31 ? 1]. 根据这个假设,如果反转后的整数溢出,则返回 0.] 需考虑:反转以后

力扣题目汇总(加一,旋转数组,整数反转)

力扣题目汇总(加一,旋转数组,整数反转) 加一 1.题目描述 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 示例 1: 输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123. 示例 2: 输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321. 2.解题思路 #错误思路 列表最后一位加1,判断最后

【Leetcode】【简单】【17. 整数反转】【JavaScript】

题目描述 7. 整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123输出: 321 示例 2: 输入: -123输出: -321示例 3: 输入: 120输出: 21注意: 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1].请根据这个假设,如果反转后整数溢出那么就返回 0. 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse