题目描述: 给出一个32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1: 输入: 123 输出: 321 示例 2:
输入: -123 输出: -321 示例 3:
输入: 120 输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
常规解法:对于负数,先转换成正数,和正数做一样的反转处理,判断结果是否溢出,再对负数加负号处理。
注意:int型整数最小值取绝对值后超出整型范围,需要用long型存储,对应的取绝对值函数也应该用labs函数。
//C语言
#include<math.h>
#define MaxIntInteger 2147483647 //也可以不使用宏定义,使用INT_MAX和INT_MIN
#define MinIntInteger -2147483648
int reverse(int x){
long res = 0;
long num = labs((long)x);
while(num > 0){
res = res * 10 + num % 10;
num = num / 10;
}
if(x < 0) res = -res;
if(res > MaxIntInteger || res < MinIntInteger) return 0;
return res;
}
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
let num = x, res = 0;
let maxIntInteger = 2147483647,
minIntInteger = -2147483648;
num = Math.abs(num);
while(num != 0){
res = res * 10 + num % 10;
//注意这里js的除法运算会保留小数
num = Math.floor(num / 10);
}
if(x < 0) res = -res;
if(res > maxIntInteger || res < minIntInteger) return 0;
return res;
};
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
let num = x, res = ""; //用字符串记录
let maxIntInteger = 2147483647,
minIntInteger = -2147483648;
num = Math.abs(num);
while(num != 0){
res += num % 10;
//注意这里js的除法运算会保留小数
num = Math.floor(num / 10);
}
res = Number(res);
if(x < 0) res = -res;
if(res > maxIntInteger || res < minIntInteger) return 0;
return res;
};