7.反转整数

作者: 闭门造折 | 来源:发表于2018-09-02 12:40 被阅读6次

给定一个 32 位有符号整数,将整数中的数字进行反转。

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−2^31, 2^31 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。

这道题我的思路是,先全部统一为正数,然后每次模10取余数,res*10+余数,实现反转

实现过程中出现的第一个问题是res * 10,由于res是int型,当超过int型范围时,存储异常。因此修改为(long long)res * 10
进行强制类型转换,这样就不会溢出了

出现的第二个问题,是我统一为正数的时候,负数直接*-1,观察到负数的范围实际上是可以取到-2^31的,当乘-1后,会超过int边界,无法正常做乘法运算。
思考了一下,不作统一转换了,只是在res计算的时候,余数x%10的值,当x为负数时,余数额外乘-1,如此得到的就均为正数结果了

从参考答案中了解到,原来C++中有自带的INT_MAX和INT_MIN

具体代码:

#include<ctype.h>
#include<stdio.h>
#include<cstdio>
#include<string>
#include<iostream>

using namespace std;

int reverse(int x){
    int sym = 0;
    long long int_max = 2147483647;
    int res = 0;
    if(x < 0){
        sym = 1;
    }
    while(x){
        if(int_max + sym - (x % 10) < (long long)res * 10){
            return 0;
        }
        res *= 10;
        res += sym ? (-1 * (x % 10)) :x % 10;
        x /= 10;
    }
    if(sym){
        res *= -1;
    }
    return res;
}

int main(){
    cout << reverse(-647) << endl;
    return 0;
}

相关文章

  • Leecode: 7.整数反转

    在刷Leecode, 7.整数反转思路:将整数转为string后反转,再使用int()转回整数可以顺利提交代码,但...

  • [day1] [LeetCode] [title7,9]

    7. 反转整数 给定一个 32 位有符号整数,将整数中的数字进行反转。 示例1: 输入: 123 输出: 321 ...

  • 7. 反转整数

    20180919-摘抄自7. 反转整数 给定一个 32 位有符号整数,将整数中的数字进行反转。 示例 1: 输入:...

  • 算法练习四

    7. 反转整数 给定一个 32 位有符号整数,将整数中的数字进行反转。 示例 1: 输入: 123输出: 321示...

  • LeetCodeDay07 —— 反转整数&字符串中的第一个唯一

    7. 反转整数 描述 给定一个 32 位有符号整数,将整数中的数字进行反转。 示例 注意 假设我们的环境只能存储 ...

  • 7.反转整数

    给定一个 32 位有符号整数,将整数中的数字进行反转。 示例 1: 示例 2: 示例 3: 注意:假设我们的环境只...

  • 7. 反转整数

    给定一个 32 位有符号整数,将整数中的数字进行反转。 示例 1:输入: 123输出: 321 示例 2:输入: ...

  • 7.反转整数

    题目 思路1.判断范围2.反向生成数字代码

  • 7. 反转整数

    一、题目原型: 给定一个 32 位有符号整数,将整数中的数字进行反转。输入: 123输出: 321输入: -123...

  • 7. 反转整数

    内容 给定一个 32 位有符号整数,将整数中的数字进行反转。 示例 1: 输入: 123输出: 321示例 2: ...

网友评论

    本文标题:7.反转整数

    本文链接:https://www.haomeiwen.com/subject/pfcmwftx.html