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

C++でアダム数(Adam Number)を判定する方法


アダム数(Adam Number)とは、ある数を2乗した結果が、その数の桁を逆順に並べた数の2乗をさらに逆順にしたものと一致するような数のことです。

アダム数の概念

ある数がアダム数であるためには、「元の数の2乗」と「元の数を逆順にした数の2乗をさらに逆順にしたもの」が等しくなる必要があります。具体例で確認してみましょう。

例:12の場合
・12の2乗は 144
・12の桁を逆順にすると 21
・21の2乗は 441
・441は、144(12の2乗)を逆順にした数と一致します

このように12はアダム数です。同様に、13や31などもアダム数に該当します(13² = 169、31² = 961 となり、169を逆順にすると961になるためです)。

アダム数を判定するアルゴリズム

  • 与えられた数 xy について、その2乗 (xy)² を求めます。
  • xy の桁を逆順に並べ替えて yx を作ります。
  • yx について、その2乗 (yx)² を求めます。
  • (xy)² の桁を逆順にし、(yx)² と比較します。
  • 両者が等しければ、その数はアダム数です。

C++による実装例

#include <iostream>
using namespace std;
int reverseDigits(int num) {
    int rev = 0;
    while (num > 0) {
        rev = rev * 10 + num % 10;
        num /= 10;
    }
    return rev;
}
int main() {
    int num = 31;
    cout << num << " is ";
    int rev = reverseDigits(num);
    if ( (num*num) == (reverseDigits(rev*rev)) )
        cout << "Adam Number";
    else
        cout << "not an Adam Number";
    return 0;
}

実行結果

31 is Adam Number

このプログラムでは、まず reverseDigits 関数が数値の桁を逆順にする処理を担当しています。main 関数では、対象の数値(ここでは31)について「元の数の2乗」と「逆順にした数の2乗をさらに逆順にした値」を比較し、両者が一致すればアダム数であると判定して結果を出力します。

  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 以下の図から出力を確認できます。 この問題は数列に関するものなので、解法ではまず数列のパターンを見つけることから始めます。 解法のアプローチ このプログラムでは、数列の