C言語プログラム:数値がその桁に含まれる数字で割り切れるかどうかを判定する方法
ある数値 n が与えられたとき、その数値を構成する各桁の数字の中に、元の数値を余りなく割り切れるものが存在するかどうかを判定するのが本記事の目的です。
例えば、数値 128625 を考えてみましょう。この数値は 5 で割り切れますが、5 はまさにこの数値の桁に含まれています。このように、数値自身の桁の数字が約数になっているケースをチェックします。
入出力例
入力: 53142 出力: Yes 説明: この数値は 1、2、3 のいずれでも割り切れます。 これらはすべて数値の桁に含まれる数字です。 入力: 223 出力: No 説明: この数値は 2 でも 3 でも割り切れません。
解決アプローチ
以下の手順で問題を解決します。
- 数値の一の位(最下位の桁)から順番に処理を始めます。
- 取り出した数字で元の数値が割り切れるかどうかを確認します。
- 数値を 10 で割って、次の桁へ移動します。
- 数値が 0 になるまで上記の手順を繰り返します。
アルゴリズム
開始
関数 int divisible(long long int n) 内:
ステップ 1 -> 変数 temp を宣言し、n で初期化する
ステップ 2 -> n が真である間ループを続ける:
k に n % 10(一の位の数字)を代入する
もし temp % k == 0 ならば、
1 を返す
n = n / 10 を設定する
ループ終了
0 を返す
関数 int main() 内:
ステップ 1 -> 変数 n を宣言し、654123 で初期化する
ステップ 2 -> もし (divisible(n)) ならば、
"Yes" を出力する
ステップ 3 -> そうでなければ、
"No" を出力するC言語による実装コード
#include <stdio.h>
int divisible(long long int n) {
long long int temp = n;
// 桁のいずれかの数字で n が割り切れるかチェック
while (n) {
int k = n % 10;
if (temp % k == 0)
return 1;
n /= 10;
}
return 0;
}
int main() {
long long int n = 654123;
if (divisible(n)) {
printf("Yes\n");
}
else
printf("No\n");
return 0;
}実行結果
上記のコードを実行すると、以下の出力が得られます。
Yes
この結果から、654123 は自分の桁に含まれる数字(例えば 3)で割り切れることが確認できます。なお、一の位が 0 の場合はゼロ除算になるため、実運用では 0 の桁をスキップする処理を追加するとより安全なコードになります。
-
C言語でプラス完全数(Armstrong数)を判定するプログラム
n桁の整数xが与えられたとき、その数が「プラス完全数(Plus Perfect Number)」であるかどうかを判定するのが本記事のテーマです。プラス完全数とは、各桁の数字dを桁数nでべき乗した値(dn)をすべて合計し、その合計が元の数と一致する場合を指します。この考え方は、いわゆる「Armstrong数(ナルシシスト数)」の判定とまったく同じものです。 具体例 入力:163 出力:完全数ではない 説明:1³ + 6³ + 3³ = 244 となり、163と一致しないため 入力:371 出力:完全数である 説明:3³ + 7³ + 1³ = 371 となり、元の数と一致するため 上記の例のよ
-
【Python】配列内のすべての桁を使って3で割り切れる数を作成できるか判定する方法
この記事では、与えられた問題文を解決するための解法とアプローチについて詳しく解説します。 問題文 整数の配列が入力として与えられたとき、これらの数値に含まれるすべての桁を使用して、3で割り切れる整数を作成できるかどうかを判定する必要があります。 ここでは、整数の配列と配列の長さという2つの引数を受け取る関数を作成します。 解法のポイント この実装は、暗算でよく使われる数学的な性質に基づいています。それは次の通りです。 「ある数の各桁の合計が3で割り切れるならば、その数自体も3で割り切れる」 この性質を利用すると、実際に桁を組み合わせて数値を生成する必要はなく、配列内の各要素について3で割った余