1.题目:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
Given a 32-bit signed integer, reverse digits of an integer.
2.代码:
#include"limits.h"
int reverse(int x) {
int rev=0;
while(x!=0){
int pop=x%10;
x/=10;
if(rev > INT_MAX/10 || rev < INT_MIN/10 || (rev == INT_MAX / 10 && pop > 7) || (rev == INT_MIN / 10 && pop < -8))
return 0;
rev=rev*10+pop;
}
return rev;
}
3.知识点:
1 .
//pop operation:
pop = x % 10;
x /= 10;
//push operation:
temp = rev * 10 + pop;
rev = temp;
2 .
假设rev 是正数,对于rev=rev*10+pop
若rev>INT_MAX/10, 必溢出.
若rev=INT_MAX/10 但 pop>7, 必溢出.
对于rev 是负数类似.