C++ 编程练习:整数反转

整数反转(Leetcode 简单)

题目描述:

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

示例1:

输入: 123
输出: 321

示例2:

输入: -123
输出: -321

示例3:

输入: 120
输出: 21

注意:

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

分析:
首先要知道这个题的逆序算法
把最后的一个数字相继的提出然后通过依次的乘十累加还原逆序数。

213 取 3;010+3=3;
21 取 1, 3
10+1=31;
2 取 2, 31*10+1=312。

这里注意设定的余数和累加数的数据类型,防止溢出。最后按照题目要求把溢出的逆序数输出为0即可。

答案:

#include<iostream>
using namespace std;

class Solution {
public:
    int reverse(int x) {
        long temp = 0, sum = 0; // 题目的范围就是 int 的范围,所以设成 long 防止溢出
        while (x != 0) {
            temp = x % 10; // 取余,即最后一位
            sum = sum * 10 + temp; // 每次加一个数字,就要把上次累加的数字进一位,保证先累加的最高
            x = x / 10;  // 去掉最后一位
        }
        if (sum >= INT_MAX || sum <= INT_MIN) // 溢出情况
            sum = 0;
        return sum;
    }
};

int main() {
    int x;
    cin >> x;
    Solution a;
    cout << a.reverse(x);
    return 0;
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值