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

C++でべき乗(pow)関数を自作する方法

べき乗関数(power function)は、基数指数という2つの数値を受け取り、基数を指数回だけ掛け合わせた結果(累乗)を求めるための関数です。

例を見てみましょう。

基数 = 2
指数 = 5

2^5 = 32

つまり、2の5乗は32になります。

ここでは、標準ライブラリの pow() 関数に頼らず、C++でべき乗計算を自前で実装する方法を紹介します。

サンプルプログラム

#include <iostream>
using namespace std;

int main(){
    int x, y, ans = 1;

    cout << "基数を入力してください: \n";
    cin >> x;

    cout << "指数を入力してください: \n";
    cin >> y;

    for(int i = 0; i < y; i++)
        ans *= x;

    cout << x << " の " << y << " 乗は " << ans << " です";

    return 0;
}

実行結果

上記プログラムを実行すると、次のような出力が得られます。

基数を入力してください: 3
指数を入力してください: 4
3 の 4 乗は 81 です

プログラムの解説

それでは、このプログラムの処理の流れを順番に見ていきましょう。

1. ユーザーからの入力受け付け

まず、基数と指数の値をユーザーから入力として取得します。該当するコード部分は以下の通りです。

cout << "基数を入力してください: \n";
cin >> x;

cout << "指数を入力してください: \n";
cin >> y;

x に基数、y に指数が格納されます。また、計算結果を保存するための変数 ans は、初期値として 1 を設定しています。

2. forループによるべき乗計算

べき乗の計算は、指数の値と同じ回数だけ繰り返すforループで行います。各ループの中で、基数の値を ans に掛けていきます。該当するコード部分は以下の通りです。

for(int i = 0; i < y; i++)
    ans *= x;

たとえば基数が3、指数が4の場合、ans は 1 → 3 → 9 → 27 → 81 と更新され、ループ終了時に最終的なべき乗の値が ans に格納されます。

3. 結果の出力

最後に、計算結果であるべき乗の値を画面に表示します。該当するコード部分は以下の通りです。

cout << x << " の " << y << " 乗は " << ans << " です";

補足:実装時の注意点

  • この実装では指数が0以上の整数を前提としています。負の指数や小数の指数を扱う場合は、別途対応が必要です。
  • 指数が0の場合、forループは一度も実行されず、ans の初期値 1 がそのまま返されます。これは数学的に正しい挙動(x^0 = 1)です。
  • 実際の開発では、<cmath> ヘッダに用意されている標準の pow() 関数を使うのが一般的ですが、仕組みを理解するために自作してみるのは良い学習になります。
  1. C++で y mod 2^x(2のx乗)の値を求める方法

    この問題では、2つの値 x と y が与えられ、y を 2 の x 乗(2x)で割った余りの値を求めることが課題となります。 具体例を見て、問題の内容を確認しましょう。 入力 : x = 2, y = 19 出力 : 3 解説 − y % 2x = 19 % 22 = 19 % 4 = 3 解法のアプローチ 最もシンプルな解法は、pow() 関数を使って 2x の値を直接計算し、その後で y % 2x を求める方法です。 もうひとつの効率的なアプローチとして、対数(log)を活用する方法があります。y < 2x が成り立つ場合、割り算の余りは y 自身と等しくなります。この条件は次の

  2. C++とOpenCVで動画のFPS値を取得する方法をわかりやすく解説

    OpenCVで動画のFPS(Frames Per Second:1秒あたりのフレーム数)を取得するには、VideoCaptureクラスが提供するget()メソッドを使用します。引数にはCAP_PROP_FPSを指定します。このプロパティは、対象動画のFPS値を返します。プログラムの冒頭では、FPS値を格納するための整数型変数「FPS」を宣言しています。その後、FPS = cap.get(CAP_PROP_FPS);という処理によって、取得したFPS値を変数に保存します。以下のサンプルプログラムは、指定した動画ファイルのFPSを取得し、コンソールウィンドウに表示するものです。サンプルコード#in