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()関数を使うのが一般的ですが、仕組みを理解するために自作してみるのは良い学習になります。
-
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 自身と等しくなります。この条件は次の
-
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