【Leetcode】之Reverse Integer
2015-10-25 11:23
323 查看
题目描述:
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
我的解题思路:
这道题就是一套数学题,给定一个10进制整数,需要先求得个位,十位等各个位的数值,然后把整数给反转一下。这道题的考点应该是在于:int型的存储范围有限,应该如何应对有符号整数溢出的问题。查阅资料,《C++ primer plus》中写到:
C++确保无符号整形在溢出的时候不会出错,如果溢出了,就会将值设定为另一端的取值。
而对于有符号整形,测试了一下,上溢出和下溢出的时候,取值都会成为0x800000000,是最小的负数。本题的求解程序如下:
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
我的解题思路:
这道题就是一套数学题,给定一个10进制整数,需要先求得个位,十位等各个位的数值,然后把整数给反转一下。这道题的考点应该是在于:int型的存储范围有限,应该如何应对有符号整数溢出的问题。查阅资料,《C++ primer plus》中写到:
C++确保无符号整形在溢出的时候不会出错,如果溢出了,就会将值设定为另一端的取值。
而对于有符号整形,测试了一下,上溢出和下溢出的时候,取值都会成为0x800000000,是最小的负数。本题的求解程序如下:
class Solution { public: int reverse(int x) { int flag=1; int res=0; int result=0; if(x<0) flag=-1; unsigned int tmp=x*flag; int idx=1;int div = 0; vector<int> store; div=tmp-pow(10.0,idx); if(div<0) return x; while(div>=0) { idx++; div=tmp-pow(10.0,idx); } for(int i=idx-1;i>=0;i--) { int curr = tmp/(pow(10.0,i)); store.push_back(curr); tmp=tmp-curr*(pow(10.0,i)); } vector<int>::iterator pr; idx=0; for(pr=store.begin();pr!=store.end();pr++) { res=res+(*pr)*pow(10.0,idx); idx++; } if(res<0) res=0; result=res*flag; return result; } };
相关文章推荐
- 【cocos2dx】游戏逻辑+cocos2dx+编译器 导致的TouchEvent异常
- C#操作字符串方法总结<转>
- password
- Android开源组件---CircleImageView的使用
- 报No 'Access-Control-Allow-Origin' header is present on the requested resource
- 日经春秋 20151025
- Android_09_自定义内容提供者及访问内容提供者
- OSI七层与TCP/IP五层网络架构详解
- 极光出现网络异常无法登录的解决方法
- PowerPoint演示文稿中设置自定义动画
- 据说富翁一般有7种收入来源。有哪些简单的,在你睡觉时也能带来收入的方法呢?
- 了解范数的文章
- 【UML】时序图Sequence diagram(交互图)
- (iOS)手动内存管理01
- 括号匹配
- 数据类型真假的问题
- String的对象建立和Java的堆栈机制
- [实战]MVC5+EF6+MySql企业网盘实战(8)——文件下载、删除
- 肾最害怕四件事
- QMetaObject::connectSlotsByName 总结