• 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; 
        }

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

  • 相关阅读:
    C# 网络编程之基于SMTP发送电子邮件
    C#实现邮件发送的功能
    Java发邮件基础篇
    java发送邮件高级篇
    Windows下bat脚本自动发邮件
    Python发送QQ邮件
    信息系统项目管理师EV、PV、AC、BAC、CV、SV、EAC、ETC、CPI、SPI概念说明
    DOS命令整理
    JAVA对时间的操作
    JAVA 调用HTTP接口POST或GET实现方式(转)
  • 原文地址:https://www.cnblogs.com/ketchups-notes/p/4220363.html
Copyright © 2020-2023  润新知