C言語

【C言語】引き算とfor、whileループだけで割り算を再現する


プログラミングの授業などでは、練習問題として「割り算(除算)」を「引き算(減算)」だけで再現するという課題を出題されることがあります。

本記事の内容はその課題の解き方についてです。

実際にプログラムを作成してみる

早速ですが、実際にプログラムを作成していきます。

プログラム作成の手順

プログラム作成の手順は以下の通りです。

  1. 除数aと被除数bに値を入力させる
  2. bからaの値を繰り返し引く(bの値がaの値よりも小さくなるまで)
  3. 2の処理を行った回数を商、2終了時のbの値を余りとする

※念のためループ処理に「For文を使う場合」と「While文を使う場合」で分けてプログラムを作成しようと思います。

実装例(For文を使用する場合)

上記の手順に従ってプログラムを作成します。

#include <stdio.h>

int main(void) {

  /* 変数を定義する */
  int a, b, q, r;

  /* 被除数の入力を促す */
  printf("Enter the dividend :\n");
  scanf("%d", &b);

  /* 除数の入力を促す */
  printf("Enter the divisor :\n");
  scanf("%d", &a);

  /* 変数rにbの値を代入する */
  r = b;

  /* rからaの値を繰り返し引き、その度にqに1を加算する
     rの値がaの値よりも小さくなったらループを終了     */
  for(q=0; r>=a; q++){
    r -= a;
  }

  /* 計算結果を出力する */
  printf("Result :\n%d / %d = %d ... %d\n", b, a, q, r);

  return 0;

このプログラムを実行すると以下の出力結果が得られます。

Enter the dividend :
100
Enter the divisor :
3
Result :
100 / 3 = 33 ... 1

特に問題なく処理が完了していることを確認できます。

実装例(While文を使用する場合)

上記の手順に従ってプログラムを作成します。

#include <stdio.h>

int main(void) {

  /* 変数を定義する */
  int a, b, q, r;

  /* 被除数の入力を促す */
  printf("Enter the dividend :\n");
  scanf("%d", &b);

  /* 除数の入力を促す */
  printf("Enter the divisor :\n");
  scanf("%d", &a);

  /* 変数rにbの値を代入する */
  r = b;

  /* rからaの値を繰り返し引き、その度にqに1を加算する
     rの値がaの値よりも小さくなったらループを終了     */
  while(r >= a){
    r -= a;
    q++;
  }

  /* 計算結果を出力する */
  printf("Result :\n%d / %d = %d ... %d\n", b, a, q, r);

  return 0;

このプログラムを実行すると以下の出力結果が得られます。

Enter the dividend :
100
Enter the divisor :
3
Result :
100 / 3 = 33 ... 1

こちらも特に問題なく処理が完了していることを確認できます。