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

C言語で乗算(*)と除算(/)を使わずにべき乗関数を実装する方法

べき乗(Power)とは、同じ数を指定された回数だけ掛け合わせた結果のことです。たとえば 5n であれば、「5 × 5 × 5 …」と n 回繰り返した値になります。

通常、べき乗の計算には乗算演算子(*)や除算演算子(/)を使用しますが、これらを使わずに実装することも可能です。その鍵となるのがネストされたループ(二重ループ)です。乗算は「同じ数を繰り返し加算する」ことで表現できるため、加算処理を n 回繰り返すループ構造を組み合わせることで、べき乗の計算を実現できます。

アルゴリズムの考え方

具体的な手順は以下の通りです。

  1. 底の値 a を初期値として answer に設定します。
  2. 外側のループで、指数 b の回数分だけ繰り返します。
  3. 内側のループで、answer に対して前回の結果(increment)を a 回分加算します。これが「掛け算」の代わりとなります。
  4. 各周回が終わるごとに increment を更新し、次の乗算に備えます。

サンプルコード

#include <iostream>
using namespace std;
int main() {
    int a = 4, b = 2;   // 4 の 2 乗を計算
    if (b == 0)
        cout << "The answer is " << 1;   // 指数が0の場合は常に1
    int answer = a;
    int increment = a;
    int i, j;
    for (i = 1; i < b; i++) {
        for (j = 1; j < a; j++) {
            answer += increment;   // 加算による乗算の代替
        }
        increment = answer;
    }
    cout << "The answer is " << answer;
    return 0;
}

実行結果

The answer is 16

コードの解説

この例では、4 の 2 乗(42)を計算しています。まず answer と increment をどちらも 4 で初期化します。外側のループは b − 1 回(この場合は 1 回)実行され、内側のループで answer に increment を a − 1 回(3 回)加算します。つまり 4 + 4 + 4 + 4 = 16 となり、乗算演算子を使わずに正しい結果が得られます。

なお、指数が 0 の場合、任意の数の 0 乗は 1 になるため、冒頭の if 文でそのケースを特別扱いしています。

  1. C言語で文字・文字列・文(空白を含む文字列)を読み書きするプログラム

    C言語でプログラミングをしていると、「1文字」「文字列」「そして空白を含む文」の3種類の入力を受け取りたい場面があります。本記事では、これら3つの入力を受け取って、そのまま同じ内容を出力する方法を解説します。なお、文字列の最大サイズは500とします。入力例と出力例たとえば、入力が以下のようになっている場合を考えてみましょう。character = T string = ProgrammingLanguage sentence = I love programming through Cこのとき、期待される出力は次の通りです。Your character: T Your string: Prog

  2. 【C言語】ビット演算子を使って2倍・半分を計算する方法

    ビット演算子は、オペランドのビット単位(2進数の各桁)に対して直接操作を行う演算子です。シフト演算を活用すると、掛け算や割り算を高速に処理できるため、組み込み開発やパフォーマンスが求められる場面でよく使われます。C言語の主なビット演算子一覧演算子説明&ビットごとのAND(論理積)|ビットごとのOR(論理和)^ビットごとのXOR(排他的論理和)<<左シフト>>右シフト~1の補数(ビット反転)AND演算の真理値表ビットごとのANDaba & b000010100111OR演算の真理値表ビットごとのORaba | b000011101111XOR演算の真理値表