返回

JS 如何判断整数是否是回文数?

前端

在计算机程序中,经常需要判断一个整数是否是回文数,即正反读都一样的数字,比如1221、12321等。本文将提供两种判断回文数的 JavaScript 算法,一种是将整数转换为字符串并利用 JavaScript 的 split() 方法,另一种是直接对整数进行计算。

1. 将整数转换为字符串并利用 JavaScript 的 split() 方法

function isPalindrome(x) {
  if (x < 0) {
    return false;
  }
  let str = x.toString();
  let reversedStr = str.split("").reverse().join("");
  return str === reversedStr;
}

在这个函数中,首先判断输入的整数 x 是否是负数,如果是则返回 false,因为负数不会是回文数。然后将整数 x 转换为字符串 str,再用 split() 方法将字符串分割成数组,然后使用 reverse() 方法将数组倒序,最后用 join() 方法将数组重新组合成字符串 reversedStr。最后比较 str 和 reversedStr 是否相等,如果相等则返回 true,否则返回 false。

2. 直接对整数进行计算

function isPalindrome(x) {
  if (x < 0 || (x % 10 === 0 && x !== 0)) {
    return false;
  }
  let reversed = 0;
  while (x > reversed) {
    reversed = reversed * 10 + x % 10;
    x = Math.floor(x / 10);
  }
  return x === reversed || x === Math.floor(reversed / 10);
}

在这个函数中,首先判断输入的整数 x 是否是负数或以 0 结尾(但不包括 0 本身),如果是则返回 false,因为负数和以 0 结尾的数都不会是回文数。

然后定义一个变量 reversed 来存储反转后的整数,并初始化为 0。然后进入一个 while 循环,只要 x 大于 reversed,就将 x 最右边的数字取出并乘以 10 加到 reversed 中,然后将 x 除以 10,去除最右边的数字。

循环结束后,比较 x 和 reversed 是否相等,或者 x 是否等于 reversed 除以 10 后的结果。如果相等则返回 true,否则返回 false。

这两种算法都可以用来判断一个整数是否是回文数,第一种方法更简单,但需要将整数转换为字符串,第二种方法更直接,但需要更多的数学计算。