码迷,mamicode.com
首页 > 其他好文 > 详细

OJ练习4——T7

时间:2015-01-14 09:44:57      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

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

标签:

原文地址:http://www.cnblogs.com/ketchups-notes/p/4220363.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!