zoukankan      html  css  js  c++  java
  • 7. Reverse Integer[E]整数反转

    题目


    Given a 32-bit signed integer, reverse digits of an integer.
    Example1: x = 123, return 321
    Example2: x = -123,return -321
    Example3: x = 120, return 21

    思路


    问题的关键在于对溢出的判断。

    思路1:用long或者long long

    直接用long或者long long计算,这样就保证不会溢出,再判断反转后的数字是否溢出。

    思路2:stoi()

    通过字符串转换,由于stoi()函数会作int范围检查,利用异常处理机制。

    思路3:字符串分片(python)

    python中int都是长整型,可以通过直接比较32位整数大小来判断是否溢出。通过字符串分片来完成反转。

    Tips


    C++知识

    • integer范围:(-2^{31} sim 2^{31}-1)
    • short为半个机器字长,int为一个机器字长,long类型为一个或者两个机器字长
    • stoi()字符处理函数,将数字字符串转换成int输出,并且对作范围检查,默认范围是在int范围内,如果超出范围会runtime error。

    整数翻转

    通过取余操作读取当前输入x的个位数,放到反转后的整数s的末位,通过s*10加上x的末位得到新的s,相当于将x左移一位。再通过x=x/10的操作,使得x右移一位,x的个位数到了小数位被强制类型转换掉了,再取余得到新的个位数。

    判断溢出

    • 与INT_MAX、INT_MIN作比较
    • 对数作一些运算,如果溢出了,那么运算后的值作反向操作会和之前的值不一样。

    Python知识

    字符串的分片

    • 有三个被索引运算符(:)分开的数字,第一个数字是起始值,默认是字符串的起始位置,即索引为0;第二个数字是结束值,默认是字符串的末尾字符;第三个数字是步长,默认为1。
    • 步长为-1时,python认为是向后进行
    • python采用的是半开区间,包含范围的起始值,但是不包含结束值。

    C++


    • 思路1
    int reverse(int x){
      long long res=0;
      while(x!=0){
        int t = res * 10 + x % 10;
        if(t /10 != res)
          return 0;
        res = t;
        t /= 10;
      }
      return res;
    }
    
    • 思路2
    int reverse(int x){
      std::string str = std::to_string(x);
      if(str[0] == '-')
        std::reverse(str.begin()+1,str.end());
      else
        std::reverse(str.begin(),str.end());
      try{
        return stoi(str);
      }
      catch(out_of_range ex){
        return 0;
      }
    }
    

    python

    def reverse(self, x):
      if x >= 0:
        s = (int)(str(x)[::-1])  
      else:
        s = -(int)(str(-x)[::-1])
      if s >= -(2**31) and s <= (2**31)-1:
        return s
      else:
        return 0
    
  • 相关阅读:
    Access的相关SQL语句
    决心创业
    [转]在.NET环境中使用单元测试工具NUnit
    [转]IE"单击以激活控件"网站代码解决法
    [转]C#中ToString格式大全
    [转]div中放flash运行30秒钟后自动隐藏效果
    Property和attribute的区别
    C++中的虚函数(virtual function)
    进程间通信方式
    关于页面传值的方法
  • 原文地址:https://www.cnblogs.com/Jessey-Ge/p/10993432.html
Copyright © 2011-2022 走看看