zoukankan      html  css  js  c++  java
  • OJ练习4——T7

    Reverse Integer

    Example1: x = 123, return 321
    Example2: x = -123, return -321

    2015.4.8重做

    一开始还是想用vector或字符串表示结果,可见自己做出来的思路印象最深刻。

    这道题的关键是除法和取余的运算。

    重新写的代码忽略了溢出的情况,溢出可能出现在reverse后数据大于INT_MAX.所以要判断res,而不是x。

    只能把res定位long类型,这样才可以得到更小类型的int结果。

    【第一稿】

    #include<iostream>
    #include<string>
    
    using namespace std;
    
    int main()
    {
        int x;
        cin>>x;
        string s="";
        while(x>0)
        {
            s+=x%10+48;
            x/=10;
        }
        
        int base=1;
        int result=0;
            
        for(string::size_type i=s.size();i>0;i--){
                result+=((int)s[i-1]-48)*base;
                base*=10;
        }
        
        return 0;
    }

    【评价】不适用于负数。例如,输入-123,输出0.

    对于末尾为0的数,例如:输入10100,应该是输出101吧?

    题目提示说还要考虑溢出的问题,如果用字符串表示转换后的结果,再计算其十进制数,是否不用考虑数字太大的溢出问题?

    【第二稿】

     在第一稿的基础上修改了负数的bug,但是将main中的process改成class中封装的函数,就不能运行正确了,单单字符串反转表示就出错,找不到错因。

    放弃用字符串,使用纯计算:

    int reverse(int x) {
      int x0,y;
        if(x<0)
            x0=0-x;
        int base1=1;
        int base2=1;
        while(x0/base1>=10){
            base1*=10;
        }
        //cout<<base1<<endl;
        long results=0;
        while(x0>0){
            y=x0/base1;
            x0%=base1;    
            results+=y*base2;
            base1/=10;
            base2*=10;
            
        }
        if(x<0)
            results=0-results;
        return results;
    }

    【结果】在自己的编译器上可以(没有处理溢出),但在oj上不行,比如输入1也不能通过。

    后来看了网上的答案。。。。无语凝噎

    int reverse(int x) {
        long res = 0;  
            while(x)  
            {  
                res = res*10 + x%10;  
                x /= 10;  
            } 
            if(res>2147483647||res<-2147483648)
                return 0;
            else
                return res; 
        }

    【评价】短小精悍有没有!!!不到十行……自己太水了。

  • 相关阅读:
    【leetcode】1103. Distribute Candies to People
    【leetcode】1074. Number of Submatrices That Sum to Target
    【leetcode】1095. Find in Mountain Array
    【leetcode】1094. Car Pooling
    2018.9.27 长难句1
    L142
    L141
    L140
    Agilent RF fundamentals (11)-Vector modulator
    Agilent RF fundamentals (10) Mixer ,Phase domain and modulator
  • 原文地址:https://www.cnblogs.com/ketchups-notes/p/4220363.html
Copyright © 2011-2022 走看看