zoukankan      html  css  js  c++  java
  • 整数反转

    整数反转

    描述

    示例 1:

    输入: 123
    输出: 321
    

    示例 2:

    输入: -123
    输出: -321
    

    示例 3:

    输入: 120
    输出: 21
    

    注意:

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

    思路

    • 提取正负号
    • 转化为正数后提取每一位数
    • 倒序将提取出的数赋值相加
    • 溢出判断
    int reverse(int x){
        char sign = 1,nums = 0,value[10] = {0};
        int final = 0;
        long final_long = 0;
        //符号提取,数字提取
        if(x < 0) {
            if(x == -2147483648)//-2^31,溢出无法转化正数,且反转后溢出
                return 0;
            else
                x = -x;
            sign = -1;
        }
        //获取x位数
        for(;x;nums++) {
            value[nums] = x % 10;
            x = x / 10;
        }
    
        for(int i=0;nums > 0;nums--) {
            final_long += value[i++];
    
            if(nums > 1)//还有下一位
                final_long *= 10;
        }
        final = (int)final_long;
        if(final == final_long)
            return final * sign;
        else
            return 0;
        
    }
    

    注意

    • 错误检查一个是能否转化为合格正数,一个是反转后是否发生溢出

      -------------------------------------------分割线!!!!-------------------------------------------------------

    更新

    在网上看到一些其他人的解法,醍醐灌顶,直接可以将上述代码简化很多很多,直接上代码:

    int reverse(int x){
        int final = 0;
        long final_long = 0;   
    
        while(x) {
            final_long = final_long * 10 + x % 10;
            x = x / 10;
        }
        final = (int)final_long;
        if(final == final_long)
            return final;
        else
            return 0;
        
    }
    
    1. 原本的提取正负号,其实根本没有必要,因为正数和负数在运算过程中,唯一不同的就是取余的最后一位,负数最后一位的取余是带着正负号的,所以直接算就可以了,自己还是思维比较死板啊,想当然地多此一举
    2. 最终结果的计算和取余的过程可以合在一起,我之前总是纠结于要得到整数的位数,才能继续计算,其实就像上面一样,取一次余继续×10就可以了,过程真的简化了好多好多
    • 自己的定式思维在没有直接对比时真的完全意识不到有多少学习,这道题算是没有白做,学到了很多
  • 相关阅读:
    wcf简单的创建和运用
    关于DevExpress的gridControl的简单使用
    泛型 Field 和 SetField 方法 (LINQ to DataSet)
    【转】string.Format对C#字符串格式化
    ashx实现文件下载以及文件MD5码测试
    【转】10分钟了解设计模式(C#)
    [转]Jquery中AJAX错误信息调试参考
    搭建Harbor docker镜像仓库
    安装python3.x
    shell替换
  • 原文地址:https://www.cnblogs.com/ekkone/p/11667178.html
Copyright © 2011-2022 走看看