给一个32位的有符号整数,范围[-2^31,2^31-1].对整数进行反转,考虑溢出和正负数问题,溢出返回0,正负不改变

题目:

给一个32位的有符号整数,范围[-2^31,2^31-1].对整数进行反转,考虑溢出和正负数问题,溢出返回0,正负不改变

第一种方法,数字=>字符串=>数组(反转)=>字符串=>数字

function reverseNum(num) {
	const max = Math.pow(2, 31) - 1; //32 位最大整数
	const min = Math.pow(-2, 31); // 32 位最小整数
	const sign = Math.sign(num); // 获取数字正负的符号
	num = Math.abs(num); // 取数的绝对值
	let res = num.toString().split('').reverse().join(''); //转字符串,分割成数组,反转,转换成字符串
	res = sign * parseInt(res); // 转为整数加上符号
	if (res > max || res < min) {
		//溢出判断
		return 0;
	} else {
		return res;
	}
}
console.log(reverseNum(-234));  //-432
console.log(typeof reverseNum(-234))  //number

第二种方法, 取余法

function reverseNum(num) {
	const max = Math.pow(2, 31) - 1; //32 位最大整数
	const min = Math.pow(-2, 31); // 32 位最小整数
	const sign = Math.sign(num); // 获取数字正负的符号
	num = Math.abs(num); // 取数的绝对值
	let res = 0;  
	let remainder;   // 余数
	while (num > 0) {
		remainder = num % 10;   
		num = (num - remainder) / 10; 
		res = res * 10 + remainder; 
    }
    
    /*
    num=-234 处理后循环操作的就是  234 
                第一轮              第二轮              第三轮              ...
    remainder   234%10=4            23%10=3             2%10=2            num=0 不满足条件,结束循环
    num         (234-4)/10=23       (23-3)/10=2         (2-2)/10=0
    res         0*10+4=4            4*10+3=43           43*10+2=432


    */
	res *= sign;
	if (res > max || res < min) {
		//溢出判断
		return 0;
	} else {
		return res;
	}
}
console.log(reverseNum(-234));  //-432
console.log(typeof reverseNum(-234))  //number

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值