7.整数反转
题目描述: 给出一个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; };