首页 > 代码库 > 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。