首页 > 代码库 > OJ练习4——T7

OJ练习4——T7

Reverse Integer

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

【第一稿】

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

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

 

OJ练习4——T7