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

数値のすべての桁で割り切れるかどうかを判定するCプログラム

概要

整数 n が与えられたとき、その数値を構成するすべての桁が n を割り切るかどうかを判定します。つまり、数値が「xy」と表される場合、x と y の両方とも n を割り切れる必要があります。

サンプル

入力: 24

出力: Yes(はい)

説明: 24 % 2 == 0、24 % 4 == 0 となるため、構成する桁である 2 と 4 の両方が 24 を割り切ることができます。

アルゴリズムの考え方

条件分岐を使用しながら、各桁について次の 2 点を順番に確認していきます。

  • その桁の値が 0 ではないこと(0 による除算はエラーになるため)
  • その桁の値で元の数値が割り切れること

具体的には、元の数値のコピーに対してループ処理を行い、% 10 を使って末尾の桁を 1 つずつ取り出し、割り切れるかどうかをチェックします。1 桁でも割り切れないものが見つかった場合はフラグを 0 に変更し、最終的にフラグの状態によって結果を出力します。

サンプルコード

#include <stdio.h>

int main() {
    int n = 24;
    int temp = n;
    int flag = 1;

    while (temp > 0) {
        int r = temp % 10;              // 末尾の桁を取り出す
        if (!(r != 0 && n % r == 0)) {
            flag = 0;                   // 割り切れない桁が存在する
        }
        temp /= 10;                     // 次の桁へ移動
    }

    if (flag == 1)
        printf("この数は自分のすべての桁で割り切れます\n");
    else
        printf("この数は自分のすべての桁で割り切れません\n");

    return 0;
}

実行結果

この数は自分のすべての桁で割り切れます

補足ポイント

このような「自分自身の各桁で割り切れる数」は、自己整除数と呼ばれることもあります。実装時の注意点として、数値の中に 0 という桁が含まれる可能性があるため、除算を行う前に必ず「桁の値が 0 ではないか」という条件チェックを入れる必要があります。また、桁を取り出す際には元の変数ではなくコピーした変数(temp)を操作することで、割り算の判定に必要な元の値を保持したまま処理できます。

  1. C言語でプラス完全数(Armstrong数)を判定するプログラム

    n桁の整数xが与えられたとき、その数が「プラス完全数(Plus Perfect Number)」であるかどうかを判定するのが本記事のテーマです。プラス完全数とは、各桁の数字dを桁数nでべき乗した値(dn)をすべて合計し、その合計が元の数と一致する場合を指します。この考え方は、いわゆる「Armstrong数(ナルシシスト数)」の判定とまったく同じものです。 具体例 入力:163 出力:完全数ではない 説明:1³ + 6³ + 3³ = 244 となり、163と一致しないため 入力:371 出力:完全数である 説明:3³ + 7³ + 1³ = 371 となり、元の数と一致するため 上記の例のよ

  2. 【Python】配列内のすべての桁を使って3で割り切れる数を作成できるか判定する方法

    この記事では、与えられた問題文を解決するための解法とアプローチについて詳しく解説します。 問題文 整数の配列が入力として与えられたとき、これらの数値に含まれるすべての桁を使用して、3で割り切れる整数を作成できるかどうかを判定する必要があります。 ここでは、整数の配列と配列の長さという2つの引数を受け取る関数を作成します。 解法のポイント この実装は、暗算でよく使われる数学的な性質に基づいています。それは次の通りです。 「ある数の各桁の合計が3で割り切れるならば、その数自体も3で割り切れる」 この性質を利用すると、実際に桁を組み合わせて数値を生成する必要はなく、配列内の各要素について3で割った余