Reverse digits of an integer.
2015-07-06 20:31
543 查看
Example1: x = 123, return 321
Example2: x = -123, return -321
挺简单的一个题目,只需要分情况讨论即可,因为一个int型数据可能是正数可能是负数,也可能为0,当然还有一种很重要的情况就是溢出,当实参大于int的最大值的情况下的处理,直接返回0即可
Example2: x = -123, return -321
挺简单的一个题目,只需要分情况讨论即可,因为一个int型数据可能是正数可能是负数,也可能为0,当然还有一种很重要的情况就是溢出,当实参大于int的最大值的情况下的处理,直接返回0即可
class Solution { public: int reverse(int x) { if (x == 0) { return x; } bool negative = false; if (x < 0) { negative = true; x = 0 - x; } //检测该x是否已经溢出,溢出时直接返回0 int max = numeric_limits<int>::max(); if (x>max) return 0; //到此为止,x已经是非负值了 int nBits = 1, nAverage = 10; int tmp = x; while (true) { if (nAverage == 1000000000) { if ((tmp / nAverage<10)&&(tmp/nAverage!=0)) { nBits++; break; } } if (tmp / nAverage) { nBits++; nAverage *= 10; } else break; } //到现在为止 nBits是和x位数一致,nAverage和x的位数也是一致的 int* nArray = new int[nBits]; int nCount = 0; tmp = x; if (nBits != 10) { //如果nBits不为0,也就是肯定没有溢出的情况下,则nAverage的值是多乘了一个10,进行矫正 nAverage /= 10; } while (nCount<nBits) { nArray[nCount++] = tmp / nAverage; tmp -= nAverage*nArray[nCount - 1]; nAverage /= 10; } //进行新数组的构造,作为返回值应该是防止溢出的,所以定义为unsigned long long,在int型数据下操作是没有问题的, unsigned long long sum = 0; for (int i = 0; i < nBits; i++) { unsigned long long mm = 1, m = 0; while (m!=i) { mm *= 10; m++; } sum += (unsigned long long)nArray[i] * mm; if (sum>max) return 0; } delete[] nArray; if (negative) { sum = 0 - sum; } return sum; } };这道题教会我考虑对于一个问题,我们要考虑各种边界情况,比如为0,比如溢出...
相关文章推荐
- Android 百分比布局库(percent-support-lib) 解析与扩展
- 欢迎使用CSDN-markdown编辑器
- MSP430F149学习之路——LED
- 微博开放接口的使用
- IOS开发高效宏整理
- NYOJ 96 n-1位数
- 频繁分配释放内存导致的性能问题的分析
- 前端博客收藏
- java SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- 基于mongodb, 设计游戏中的个人背包系统
- Activity Liftcycle
- 【Effective C++ 读书笔记】条款03: 尽量使用 const
- 【c#第7次作业】学习体会
- IOS 05 UIScrollView介绍 图片轮播器
- 使用ssh公钥密钥自动登陆linux服务器
- ReactJS学习笔记八:动画
- Makefile中常用的函数
- 黑马程序员——数组
- POJ 2785 4 Values whose Sum is 0(折半枚举)
- 封装AJax实现JSON前台与后台交互