zoukankan      html  css  js  c++  java
  • LEETCODE


    【题目】

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

    示例 1:

    输入: 123
    输出: 321
     示例 2:

    输入: -123
    输出: -321
    示例 3:

    输入: 120
    输出: 21
    注意:

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


    【我的解法】

     
    class Solution {
    public:
        int maxNum = pow(2,31) - 1;
        int minNum = pow(-2,31);
        int reverse(int x) {
            //cout << maxNum <<"+" << minNum <<endl;
            string a = to_string(x);
            //cout << "source=" << a <<endl;
            int reversetemp;
            int index;
            int alen = a.length();
            for(index = 0; index < alen/2; ++index){
                reversetemp = a[index];
                a[index] = a[alen - index -1];
                a[alen - index -1] = reversetemp;
            }
            //cout << "reverse=" << a << endl;
            //去零
            index = 0;
            while(a[index] == '0'){
                index++;
            }
            if(index >= alen){
                return 0;
            }
            if(a[alen - 1] == '-'){
                return reverseNeg(&a[index]);
            }
            return reversePos(&a[index]);
        }
        int reverseNeg(string a) {
            int index;
            int alen = a.length();
            a[alen - 1] = '';
            //cout << "a=" << a << endl;
            long long retlong = 0;
            long long netRetLong = 0;
            int retint = 0;
            for(index = 0; index < a.length() - 1; ++index){
                int temp = (int)(a[index]) - '0';
                retlong = temp + retlong*10;
                netRetLong = -retlong;
                if(netRetLong < minNum){
                    return 0;
                }
            }
            return (int)netRetLong;
        }
        int reversePos(string a) {
            int index;
            //cout << "a=" << a << endl;
            long long retlong = 0;
            int retint = 0;
            for(index = 0; index < a.length(); ++index){
                int temp = (int)(a[index]) - '0';
                retlong = temp + retlong*10;
                if(retlong > maxNum){
                    return 0;
                }
            }
            return (int)retlong;
        }
    
    };

    【别人的解法】
    int reverse(int x)
    {
        int max = 0x7fffffff, min = 0x80000000;//int的最大值最小值
        long rs = 0;//用long类型判断溢出
        for(;x;rs = rs*10+x%10,x/=10);//逆序,正负通吃,不用单独考虑负值
        return rs>max||rs<min?0:rs;//超了最大值低于最小值就返回0
    }
  • 相关阅读:
    吃甘蔗(中等,模拟)
    jquery对象里面的context参数
    event对象的使用注意事项
    EcmaScript源码
    对js运算符“||”和“&&”的总结
    浏览器滚动条样式
    浏览器的重绘与重排
    input[checkbox],input[radiobox]的一些问题
    height:100%
    Sublime Text 3 多行游标
  • 原文地址:https://www.cnblogs.com/wangqiwen-jer/p/11882425.html
Copyright © 2011-2022 走看看