当前位置:   article > 正文

整数反转(C++)_c++整数反转

c++整数反转

整数反转

描述

  给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

  如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

  假设环境不允许存储 64 位整数(有符号或无符号)。

示例1

输入:x = 123
输出:321
  • 1
  • 2

示例2

输入:x = -123
输出:-321
  • 1
  • 2

示例3

输入:x = 120
输出:21
  • 1
  • 2

示例4

输入:x = 0
输出:0
  • 1
  • 2

提示:

  • -231 <= x <= 231 - 1

思路/解法

方式一

先判断是否为负数,然后整数转换为string字符串,反转之后转换为整数(在这个过程中判断是否超过 [−231, 231 − 1] )即可。

其它思路:可以不转换为string字符串,但是需要一个std::vector<int> arrs,来保存该整数的所有位数,其它逻辑。

class Solution {
public:
    int reverse(int x) {
        if(0 == x)return x;
        bool isFu = false;
        long long fu = -1;
        if(x < 0)
        {
            isFu = true;
            x *= fu;
        }

        std::string str = std::to_string(x);
        std::reverse(str.begin(),str.end());
        
        //线性处理
        long long mehrere = 1;
        long long res = 0;
        int leftGrenze = (-1)*pow(2,31);
        int rightGrenze = pow(2,31) -1;
        for(int i = str.length() - 1;i >= 0;i--)
        {
            //超过题目所给区间,返回0
            if(res + (str[i] - 48) * mehrere < leftGrenze 
            || res + (str[i] - 48) * mehrere > rightGrenze)
                return 0;
            res += (str[i] - 48) * mehrere;
            mehrere*=10;
        }
        return isFu == true?(-1)*res:res;
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

方式二

不需要使用额外的内存空间,对需要反转的整数边取便处理即可。

class Solution {
public:
    int reverse(int x) {
        int res = 0;
	    while (x)
	    {
		    int num = x % 10;
		    x /= 10;

		    if (res > INT_MAX / 10 || (res == INT_MAX / 10 && num > 7)) return 0;
		    if (res < INT_MIN / 10 || (res == INT_MIN / 10 && num < -8)) return 0;

		    res = res * 10 + num;
	    }
	    return res;
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/算法编织者/article/detail/60520
推荐阅读
相关标签
  

闽ICP备14008679号