Leetcode 7 Reverse Integer 数论
2016-05-06 14:13
381 查看
题意:将整数倒置,该题简单但是需要注意数据的范围,难得的好题。
如果出现1000000003或者-2000000003,倒置后的数超过int的范围,因此返回0,出现这种情况可以使用long long,也可以在在乘以10时进行判断。
注意:Leetcode是用linux环境的,所以他用的是g++4.78编译器,不是vc++编译器,为此在vc++编译器上我们用__int64,而g++编译器就是long long,这些是64位的int,很有用的东西,不做过相关的竞赛或者项目的人,大部分人都不知道C++有64位的int。
当然现在的编译器都支持C++11标准,就不要用__int64或long long,而是用int64,当然还有int128,Leetcode的编译器仅仅支持C++03标准,跟不上时代了,是不是更新下?当然这是题外话。。
然后给出两种解法:
long long的解法,很黄很暴力。。。
int + 乘之前判断的解法,设计相对精妙
如果出现1000000003或者-2000000003,倒置后的数超过int的范围,因此返回0,出现这种情况可以使用long long,也可以在在乘以10时进行判断。
注意:Leetcode是用linux环境的,所以他用的是g++4.78编译器,不是vc++编译器,为此在vc++编译器上我们用__int64,而g++编译器就是long long,这些是64位的int,很有用的东西,不做过相关的竞赛或者项目的人,大部分人都不知道C++有64位的int。
当然现在的编译器都支持C++11标准,就不要用__int64或long long,而是用int64,当然还有int128,Leetcode的编译器仅仅支持C++03标准,跟不上时代了,是不是更新下?当然这是题外话。。
然后给出两种解法:
long long的解法,很黄很暴力。。。
class Solution { public: int reverse(int x) { long long ans = 0; int sign = 1; if(x < 0){ sign = -1; x = -x; } for(; x; x/= 10){ ans = ans * 10 + (x % 10); } ans *= sign; if(ans > (long long)2147483647) return 0; if(ans < (long long)-2147483646) return 0; return ans; } };
int + 乘之前判断的解法,设计相对精妙
class Solution { public: int reverse(int x) { unsigned int MAX = 1<<31; int ans = 0; int sign = 1; if(x < 0){ sign = -1; x = -x; } for(; x; x/= 10){ if(ans > MAX / 10) return 0;//乘之前的判断,防止溢出 ans = ans * 10 + (x % 10); } return ans*sign; } };
相关文章推荐
- Hibernate批量提交
- git学习总结
- PHP自学no00012数据类型检测
- 虚拟币数字交易系统、
- Thumbs.dbWindows Explorer的缩略图的文件
- linux tmux 使用笔记
- IoT将如何改变我们与移动应用程序间的交互?
- 困难的串
- IOS开发: NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]
- Thumbs.dbWindows Explorer的缩略图的文件
- Struts2不配置result参数 进行跳转实现
- 正则表达式常用符号
- linux常用命令
- 使用POI读写word doc文件
- php开源项目大全
- 没有找到接受“std::string”类型的左操作数的运算符
- 我的代码无处不在,执行起来是那样的快,数据无误,日志清楚,其中包含了满满的爱
- Beacon技术是什么?
- matlab常用函数与常用指令大全
- 数据结构学习笔记