JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで回文数(パリンドローム)を判定する方法

本記事では、数値を受け取り、それが回文数であるかどうかを判定するJavaScript関数の作成方法を解説します。

回文数とは?

回文数とは、左から読んでも右から読んでも同じ数字の並びになる数値のことです。

以下に具体例を挙げます。

  • 343 … 回文数である(逆から読んでも「343」)
  • 6789876 … 回文数である(逆から読んでも「6789876」)
  • 456764 … 回文数ではない(逆から読むと「467654」となるため)

実装例

それでは、実際のコードを見てみましょう。この関数は、文字列変換を行わずに数値演算だけで判定を行う点が特徴です。

const num1 = 343;
const num2 = 6789876;
const num3 = 456764;

const isPalindrome = num => {
    let length = Math.floor(Math.log(num) / Math.log(10) + 1);
    while(length > 0) {
        let last = Math.abs(num - Math.floor(num / 10) * 10);
        let first = Math.floor(num / Math.pow(10, length - 1));
        if(first != last){
            return false;
        };
        num -= Math.pow(10, length - 1) * first;
        num = Math.floor(num / 10);
        length -= 2;
    };
    return true;
};

console.log(isPalindrome(num1));
console.log(isPalindrome(num2));
console.log(isPalindrome(num3));

コードの仕組み

このアルゴリズムは、次の手順で回文判定を行っています。

  1. 桁数の計算: 対数を使って Math.log(num) / Math.log(10) のように桁数を求めます。
  2. 両端の比較: 一番左の桁と一番右の桁をそれぞれ取り出し、一致するかどうかを確認します。
  3. 両端の除去: 一致していれば、左右の桁を取り除いた残りの数値で同じ処理を繰り返します。
  4. 判定結果の返却: 不一致が見つかった時点で false を返し、最後まで確認できれば true を返します。

なお、よりシンプルに実装したい場合は、String(num) === String(num).split('').reverse().join('') のように文字列として反転して比較する方法もよく使われます。

出力結果

コンソールには以下のように出力されます。

true
true
false

  1. JavaScriptの数値(Number)の基本と実践サンプルコード

    JavaScriptでは、整数も小数もすべて「Number」型として扱われます。この記事では、数値変数の定義方法と、それらを使った簡単な演算の例を、動作するHTMLサンプルコードとともに紹介します。サンプルコード以下は、JavaScriptで数値を扱う基本的な例です。整数(22、99)と小数(1.523)を変数に格納し、ボタンをクリックすると画面に表示する仕組みになっています。<!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport co

  2. JavaScriptで数値を丸める・切り捨てる方法|Math.round()とMath.trunc()の違いと使い方

    JavaScriptには、小数を整数へ変換するためのメソッドとして、Math.round() と Math.trunc() の2つが標準で用意されています。Math.round():小数点以下を四捨五入し、最も近い整数に丸めます。例えば「3.5」は「4」に、「3.4」は「3」になります。Math.trunc():小数点以下を単純に取り除き、整数部分だけを残します。「3.9」も「3.1」もどちらも「3」になります。それぞれの特徴を踏まえながら、実際のコード例を見ていきましょう。Math.round() と Math.trunc() の違いメソッド動作例(3.999)Math.round()四捨五