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

C++でネオン数(Neon Number)を判定する方法


ネオン数とは、ある整数の2乗の各桁の合計が、元の整数と等しくなるような数のことです。具体例を見てみましょう。

n = 9
2乗 = 81
2乗の各桁の合計 = 8 + 1 = 9

このように、2乗した値の桁を足し合わせると元の数に戻るため、9はネオン数であると言えます。

本記事では、与えられた数がネオン数かどうかを判定するプログラムをC++で実装します。ネオン数であれば「Yes」を、そうでなければ「No」を出力します。

ネオン数の特徴

10進法においてネオン数は非常に珍しく、現在知られているのは 0、1、9 の3つだけです。これは数学的に証明された性質であり、大きな数になると2乗の桁数が増える一方で、桁の合計が元の数に追いつかなくなるためです。

アルゴリズム

  • 判定対象の数 n を用意します。
  • その数の2乗を求めます。
  • 2乗した値の各桁の合計を計算します。
  • 合計が元の数と一致すれば true、一致しなければ false を返します。

C++による実装

以下は、上記のアルゴリズムをC++で実装したコードです。

#include <bits/stdc++.h>
using namespace std;
int isNeonNumber(int x) {
    int square = x * x;
    int digitsSum = 0;
    while (square != 0) {
        digitsSum += (square % 10);
        square = square / 10;
    }
    return digitsSum == x;
}
int main(void) {
    string result;
    result = isNeonNumber(1) ? "Yes" : "No";
    cout << 1 << "->" << result << endl;
    result = isNeonNumber(3) ? "Yes" : "No";
    cout << 3 << "->" << result << endl;
    result = isNeonNumber(9) ? "Yes" : "No";
    cout << 9 << "->" << result << endl;
}

コードの解説

isNeonNumber 関数では、まず引数 x の2乗を計算し、その後 while ループを使って各桁を取り出しながら合計を求めています。% 10 で最下位の桁を取得し、/ 10 で桁を一つずつ削っていくのがポイントです。最後に、桁の合計が元の数と一致するかを比較した結果を返します。

実行結果

上記のコードを実行すると、次のような出力が得られます。

1->Yes
3->No
9->Yes

この結果から、1と9はネオン数であり、3はネオン数ではないことが確認できます。

  1. C++で質素数(Frugal Number)を判定する方法【サンプルコード付き】

    この記事では、正の整数 N が与えられたときに、その数が質素数(Frugal Number)であるかどうかを判定するプログラムを C++ で作成する方法を解説します。 質素数とは? 質素数(FRUGAL NUMBER)とは、その数自身の桁数が、素因数分解による表現の桁数よりも厳密に大きい数のことです。 例:625 の場合 625 を素因数分解すると 54 となります。 625 自身の桁数:3 桁 54 の表現の桁数:2 桁 3 は 2 よりも厳密に大きいため、625 は質素数です。 最初のいくつかの質素数:125、128、243、256、343、512、625 など 問題を理解するための具

  2. C++で五胞体数(ペンタトープ数)を求める方法

    五胞体数とは? 五胞体数(ペンタトープ数)は、パスカルの三角形の第5の対角線上に現れる数列として知られています。この数列を定義するには、パスカルの三角形に少なくとも5つの数が必要となるため、数列の最初の数はパスカルの三角形の第4行である 1 4 6 4 1 から始まります。 本チュートリアルでは、n番目の五胞体数を求める方法を解説します。まずは具体的な例を見てみましょう。 入力 : 1出力 : 1入力 : 4出力 : 35 以下の図から出力を確認できます。 この問題は数列に関するものなので、解法ではまず数列のパターンを見つけることから始めます。 解法のアプローチ このプログラムでは、数列の