反转数字

反转数字

https://www.nowcoder.com/practice/1a3de8b83d12437aa05694b90e02f47a?tab=answerKey

题目描述
将给出的32位整数x翻转。
例1:x=123,返回321
例2:x=-123,返回-321
翻转可能会导致溢出,如果反转后的结果会溢出就返回 0。

示例1
输入

-123
返回值
-321

这道题的思路:
先将数据从后往前分离 -再将分离后的数据从前往后组合输出
以例子456 - 反转后 654

1、输入一个数x=456
2、循环这里使用while(条件是:x !=0)
{
将456每个从后往前位上的数字拿出来,在使用方法将他们从前往后组合在一起
456
第一次 6
剩余数45
第二次 5
剩余数 4
拿到的数字为: 6 、5 、4
组合方法:
第一次:
0X10+6 = 6
第二次:
6X10 +5 = 65
第三次:
65X10 + 4 = 654
3、输出即可
注意题目要求:
你有注意到翻转后的整数可能溢出吗?因为给出的是32位整数,则其数值范围为[−2^{31}, 2^{31} − 1][−231,231−1]。翻转可能会导致溢出,如果反转后的结果会溢出就返回 0。
这个直接加一个判断即可
c++代码如下:

class Solution {
public:
    /**
     * 
     * @param x int整型 
     * @return int整型
     */
    int reverse(int x) {
        //1234--4321
        // write code here
         int s = 0;//反转后的数字,初始值为0
        while (x != 0) {
            int a = x % 10; // 用来保存每次分离后的数据 4
            x /= 10;//去掉个位数之后的数据 123
            //数据溢出,就返回 0。
            if (s > INT_MAX  ||s < INT_MIN ) return 0;
            s = s * 10 + a;//反转后数字输出.
        }
        return s;
    }
};
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务