题意
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
样例
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为
[−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
思路
我第一想法是用字符串做----我们把待分解的整数转化为字符串类型的。
比如 123 对应 字符应该是 3 2 1 。为什么是3 2 1,因为是取模的原因。
但是这样做很麻烦,代码相对较长。后面我用整数数组保存每一位数字。
后面再对应每一位相乘,即可。注意一下数据溢出的范围。
代码
class Solution {
public:
int reverse(int x) {
int tt[20]={};
bool f=0;
long long res=0,cnt=0;
while(x){
tt[cnt++]=x%10;
x/=10;
}
long long j=1;
for(int i=cnt-1;i>=0;i--){
res += tt[i]*j;
j*=10;
// if的位置不能放错,放错了就会少判断一次。
if((long long)res>2147483647||(long long)res<-2147483647) {
f=1;
break;
}
}
if(f) return 0;
else return res;
}
};
总之,这肯定不是最简单的写法,我只是分享我的思路,蟹蟹。