不转换为字符串反转整数的函数返回0,原因是什么?
问题原因及解决方法
问题根源:循环结束后,变量
n的值已经被修改为0(比如输入5时,Math.floor(5/10)=0),而Math.sign(0)的返回值是0,所以rev_num * 0的结果必然是0,这就是返回值不符合预期的核心原因。修正方案:要在循环开始前先保存原始输入
n的符号,避免使用循环后已被修改的n来计算符号。修改后的代码如下:
function reverseInt(n) { const ten = 10; const zero = 0; // 提前保存原始输入的符号 const sign = Math.sign(n); // 用绝对值处理循环,避免负数干扰循环条件 let absN = Math.abs(n); let rev_num = zero; while (absN > zero) { rev_num = rev_num * ten + (absN % ten); absN = Math.floor(absN / ten); } return rev_num * sign; }
修改后输入5时,sign为1,rev_num为5,返回5*1=5,符合预期;同时也能正确处理负数输入(比如输入-123会返回-321)。
内容的提问来源于stack exchange,提问作者Passerby
相关产品推荐
相关产品推荐

