leetcode整型练习题 整数反转

问题描述:

给你一个 32 位的有符号整数x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−2^31^, 2^31^ − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)


问题描述

示例 1:
输入:x = 123
输出:321

示例 2:
输入:x = -123
输出:-321

示例 3:
输入:x = 120
输出:21

示例 4:
输入:x = 0
输出:0
 

提示:
-2^31 <= x <= 2^31 - 1

解题思路分析:

提示:我的解题思路是先将Int转成字符串处理,然后将字符串再转成Int型的结果输出,其中需要对输出结果进行判断,当输出的数前9位>147483647,第10位>=2时,则输出值超出Int范围(注意不能使用long类型保存结果),最后再把符号带上即为输出结果10

  • 注意:这里的long是linux下的和vs下的long范围不一样

解决方案:

#include <stdlib.h>
class Solution {
public:
    string intToString(int x)//Int转字符串
    {
        char intStr[1024] = {0};
        sprintf(intStr,"%d", x);
        return string(intStr);
    }
    int RestringToInt(string x)//反转输出Int型结果
    {
        int tmp1 = 0;
        int result = 0;
        for (int i = 0; i < x.size(); ++i)
        {
            tmp1 = int(x.c_str()[i]) - 48;
            if(i == 9 && tmp1>=2 && result>147483647)//判断临界点(int最大值2147483647)
            {
                return 0;
            }
            result += tmp1 * pow(10, i);
        }
        return result;
    }

    int reverse(int x) {
        string tmp = intToString(x);
        bool flag = false;
        if (tmp[0] == '-')//反转时不包括符号
        {
            tmp = tmp.substr(1);
            flag = true;
        }
        int iRet = RestringToInt(tmp);
        if(flag)//将‘-’补回来
        {
            iRet = iRet * (-1);
        }
        return iRet;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值