0x00:问题描述
将一int型数字实现高低位反转,若遇到反转后的数值超出int型变量表示范围则返回0值。
原题链接:https://leetcode-cn.com/problems/reverse-integer/
0x01:解题思路
由于数字反转后数值大小可能超限,故采用字符串的形式进行反转处理会比较方便。
此处用到的两C++标准库函数: string to_string(int)、int stoi(string)。前者实现整型变量->string字符串,后者实现string字符串->整型变量。
注意:DEV C++存在无法使用to_string、stoi等标准库函数的情况,此时需按如下步骤修改编译器选项:【工具】-【编译器选项】-【编译时加入以下命令】-“-std=c++11" 。
0x02:代码
1 class Solution{ 2 public: 3 int reverse(int x){ 4 int flag=1; 5 if(x>0){flag=-1; x=-x;} 6 string s1=to_string(x),maxs="-2147483648"; 7 int i=1,j=s1.size()-1; 8 for(;i<j;i++,j--) swap(s1[i],s1[j]); 9 if(s1.size()==11&&s1>maxs) return 0; 10 return flag*stoi(s1); 11 } 12 };
0x03:几点说明
#.将x统一变为负数,方便后续一致化处理。不统一为正数的原因是,对-2147483648符号取反得出的结果已经超出了INT_MAX。
#.对string字符串的反转方法采用了swap函数进行逐位反转。
#.Line9中条件判断表达式利用了string所支持的比较运算符'>',由此筛选出反转后数值超限的特殊情况。