C言語で3桁のオシリス数(Osiris Number)を判定する方法
オシリス数(Osiris Number)とは、その数を構成する各桁の順列(桁の入れ替え)から作られるすべての数の合計が、元の数そのものと等しくなる数のことです。
この問題では、3桁の整数 N が与えられ、その N がオシリス数であるかどうかを判定します。
例
入力 : N = 132 出力 : 132
解説
132 の各桁(1、3、2)から作られる2桁の数は、次の6つです。
13、12、21、23、32、31
これらの合計を求めると、
合計 = 13 + 12 + 21 + 23 + 32 + 31 = 132
元の数 132 と一致するため、132 はオシリス数であると判定できます。
判定に使える公式
3桁の数の各桁を a、b、c とすると、作られる2桁の順列の合計には規則性があります。各桁は十の位に2回、一の位に2回現れるため、合計は次の式で表せます。
合計 = (a + b + c) × 2 × 10 + (a + b + c) × 2 = (a + b + c) × 22
つまり、N == 桁の合計 × 2 × 11 が成り立てば、N はオシリス数であると判定できます。この公式を使えば、順列を実際に生成することなく、簡単に判定が可能です。
C言語での実装例
#include <stdio.h>
int main() {
int n = 132;
int a = n % 10; /* 一の位 */
int b = (n / 10) % 10; /* 十の位 */
int c = n / 100; /* 百の位 */
int digit_sum = a + b + c;
if (n == (2 * (digit_sum) * 11)) {
printf("%d is an Osiris number", n);
}
else
printf("%d is not an Osiris number", n);
return 0;
}実行結果
132 is an Osiris number
このコードでは、まず剰余演算と除算を使って各桁の値を取り出し、その合計を計算しています。その後、公式「桁の合計 × 2 × 11」と元の数を比較することで、オシリス数かどうかを効率的に判定しています。
-
JavaScriptのNumber()関数とは?使い方とサンプルコードを解説
JavaScriptのNumber()関数は、引数として渡された値やオブジェクトを、それに対応する数値へ変換するための関数です。真偽値や文字列型の数字、さらにはDateオブジェクトなども数値に変換できるため、データ型の変換処理において非常に便利な組み込み関数の一つです。例えば、Number(true)は「1」、Number(false)は「0」を返します。また、数字のみで構成された文字列「149」を渡せば数値の149に変換され、new Date()で生成した日付オブジェクトを渡すと、1970年1月1日からの経過ミリ秒数が返されます。以下に、Number()関数の動作を確認できるサンプルコードを
-
JavaScriptで数字パターンを表示する方法【初心者向けサンプルコード】
本記事では、テキスト入力欄とボタンを備えたJavaScript・HTMLプログラムの作成方法を解説します。ユーザーが入力欄に任意の数値(例:5)を入力してボタンをクリックすると、画面に以下のような数字パターンが表示される仕組みです。(n = 5 の場合の出力例)01 01 02 01 02 03 01 02 03 04 01 02 03 04 05仕組みのポイントこのパターンは二重ループ(ネストしたforループ)を使うことで実現できます。外側のループが「行」を制御し、内側のループがその行に表示する「数字の個数」を制御します。i 行目には 1 から i までの数字が順番に出力されるため、行が進む