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

C言語で数値がその桁の合計で割り切れるかどうかを判定するプログラム

数値 n が与えられたとき、その桁の合計が n を割り切れるかどうかを判定します。判定するには、一の位から順にすべての桁を合計し、その合計値で元の数値を割ればよいのです。

例えば「521」という数値の場合、桁の合計は「5 + 2 + 1 = 8」となります。しかし、521 を 8 で割ると余りが残るため、割り切れないことがわかります。

別の例として「60」を見てみましょう。桁の合計は「6 + 0 = 6」であり、6 は 60 を余りなく割り切ることができます。

入出力例

入力: 55
出力: No
説明: 5+5 = 10; 55は10で割り切れない
入力: 12
出力: Yes
説明: 1+2 = 3; 12は3で割り切れる

解決のためのアプローチ

この問題を解くには、入力された数値から各桁を取り出し、すべての桁の合計を求めた上で、その合計が元の数値を割り切るかどうかを確認します。手順は以下の通りです。

  • 入力を受け取る
  • 一の位から順に各桁を取り出し、初期値 0 の合計変数(sum)に加算していく
  • 入力された数値を桁の合計で割る
  • 結果を返す

アルゴリズム

関数 int isDivisible(long int num)
  ステップ1 -> temp = num、sum = 0 を宣言・初期化する
  ステップ2 -> num が 0 になるまでループ
    k を num % 10 として宣言・初期化する
    sum に sum + k を代入する
    num に num / 10 を代入する
  ループ終了
  ステップ3 -> temp % sum == 0 であれば、
    1 を返す
  ステップ4 -> 0 を返す
  関数終了
main() 内
  ステップ1 -> num を 55 として宣言・初期化する
  ステップ2 -> isDivisible(num) が真であれば、
    "yes" を出力する
  ステップ3 -> そうでなければ、
    "no" を出力する

C言語での実装例

#include <stdio.h>
// この関数は、与えられた数値が
// その桁の合計で割り切れるかどうかを
// 判定します
int isDivisible(long int num) {
   long int temp = num;
   // 桁の合計を求める
   int sum = 0;
   while (num) {
      int k = num % 10;
      sum = sum + k;
      num = num / 10;
   }
   // 桁の合計が num を割り切るか確認
   if (temp % sum == 0)
      return 1;
      return 0;
}
int main() {
   long int num = 55;
   if(isDivisible(num))
      printf("yes\n");
   else
      printf("no\n");
      return 0;
}

実行結果

上記のコードを実行すると、以下の出力が得られます −

No

計算量について

このアルゴリズムの時間計算量は、数値の桁数に比例する O(log10 n) です。また、追加のメモリをほとんど必要としないため、空間計算量は O(1) となります。なお、正の整数を扱う限り桁の合計が 0 になることはないため、ゼロ除算が発生する心配もありません。

  1. Pythonで数値の奇数桁の合計がKで割り切れるかどうかを判定する方法

    この記事では、数値 n と整数 k が与えられたとき、n の奇数番目の桁(右側から左側に向かって数えた場合)の合計が k で割り切れるかどうかを判定する方法を解説します。 問題の例 例えば、入力が n = 2416、k = 5 の場合を考えてみましょう。右から左に数えて奇数番目の桁は「4」と「6」なので、その合計は 4 + 6 = 10 となります。10 は 5 で割り切れるため、出力は True になります。 解決の手順 この問題は、以下のステップで解くことができます。 合計値を格納する変数 total を 0、桁位置を表す変数 pos を 1 で初期化します。 n が 0 より大きい

  2. Pythonで数値の各桁の合計を求める方法(文字列を使わない実装)

    ある数値 num が与えられたとき、その各桁の数字をすべて足し合わせた合計を求めます。ここでは、文字列に変換せず、数値演算だけで解く方法を紹介します。たとえば、入力が num = 512 の場合、5 + 1 + 2 = 8 となるため、出力は 8 になります。解き方の手順合計を格納する変数 sum を 0 で初期化します。num が 0 になるまで、次の処理を繰り返します。sum に「num を 10 で割った余り」(最下位の桁)を加算します。num を「10 で割った商」(整数)で更新します。繰り返しが終わったら sum を返します。アルゴリズムのポイントこの手法では、「10 で割った余り」