C++ で pow() 関数を使用せずに指数を計算する
-
C++ で
pow()
関数を使用せずに指数を計算する -
C++ で
pow()
関数を使用せずにfor
ループを使用して指数を計算する -
while
ループを使用して、C++ でpow()
関数を使用せずに指数を計算する -
C++ で
pow()
関数を使用せずに再帰を使用して指数を計算する - まとめ
C++ は、他の多くのプログラミング言語と同様に、タスクを容易にする関数とモジュールを含む組み込みライブラリが付属しています。 pow()
関数は、数値の累乗を簡単に計算できる組み込み関数の 1つです。
ただし、コーディング プラットフォームのように、組み込み関数を使用せずに数値の累乗を求めなければならない場合があります。 あなたがそれをどのように行うかについての推測はありますか?
この記事では、pow()
関数を使用せずに数値の指数を計算するさまざまな方法について説明します。
C++ で pow()
関数を使用せずに指数を計算する
pow()
関数を使用する別の方法に進む前に、まず pow()
関数が C++ でどのように機能するかを見てみましょう。
C++ の pow()
関数
名前が示すように、pow()
または power
関数は数値の累乗を計算します。 この関数は引数として 2つの値を取り、ヘッダー ファイルも使用する必要があります。
pow()
関数で渡す最初の値は基数として機能し、2 番目の値は基数を上げるべき指数です。 これは、pow()
関数を使用して 5^3
の値を計算するプログラムです。
#include <math.h>
#include <stdio.h>
#include <iostream>
using namespace std;
int main() {
double b = 5.0, p = 3.0, ans;
ans = pow(b, p);
cout << ans;
return 0;
}
出力:
125
pow()
関数は引数として int
ではなく double
値を取ることに注意してください。 しかし、これは pow()
関数が整数で使用できないという意味ではありません。
ただし、一部のコンパイラでは、pow()
関数で int
を使用すると、不合理な出力が得られることがあります。 たとえば、pow(4,2)
は、一部のコンパイラで 15
として出力される場合があります。
そのため、double
データ型で pow()
関数を使用することをお勧めします。
pow()
関数の基本がわかったので、C++ で pow()
関数を使用せずに数値の指数を計算する他の方法について説明しましょう。
C++ で pow()
関数を使用せずに for
ループを使用して指数を計算する
数値の指数を計算する際に、乗算を繰り返し使用することがわかっています。 この乗算が繰り返される回数は、指数または基数のべき乗によって異なります。
これは同じ例です。
5^4 = 5 * 5 * 5 * 5 = 625
この概念は、for
ループを使用してプログラミングに適用することもできます。 これが同じコードです。
#include <math.h>
#include <stdio.h>
#include <iostream>
using namespace std;
int main() {
int i, e, b, ans = 1;
cout << "Enter the base: " << endl;
cin >> b;
cout << "Enter the exponent: " << endl;
cin >> e;
/*logic to calculate power*/
for (i = 1; i <= e; ++i) {
ans = ans * b;
}
cout << "The solution is: " << ans;
return 0;
}
出力:
Enter the base:
5
Enter the exponent:
4
The solution is: 625
では、このコードでは何が起こっているのでしょうか?
変数 b
と e
は、それぞれ基数と指数を表します。 さらに、変数 ans
は値 1
を保持し、変数 i
は for
ループの実行回数を定義します。
ここで、pow()
関数で機能するロジックは、このコードの for
ブロックから始まることを理解してください。 それでは、for
ブロック内で何が起こっているかを分析してみましょう。
i
が 1
に初期化されており、指数の値、ここでは 4
まで上がっていることがわかります。 また、ループ内のステートメントは、b
と ans
を乗算し、その結果を変数 ans
自体に格納します。
以下は、反復ごとに変数 ans
に含まれるものです。
i=1
ans = 1*5
ans = 5
i=2
ans = 5*5
ans = 25
i=3
ans = 25*5
ans = 125
i=4
ans = 125*5
ans = 625
そして明らかに、ループが終了すると、変数 ans
の最終値が出力として返されます。 これは基本的に、pow()
関数を使用せずに for
ループを使用して数値の指数を計算する方法です。
while
ループを使用して同じことを実行してみましょう。
while
ループを使用して、C++ で pow()
関数を使用せずに指数を計算する
while
ループを使用して数値の指数を計算する基本的な考え方は、for
ループと同じです。 唯一の変更点は、繰り返し回数のカウント方法です。
以下のコードを見てください。
ここで、while
ブロックでは、e
の初期値はユーザーが指数として入力したものであり、各ステップで値が 1 ずつ減少します。 最後に、e
が 0
に減少すると、ループは終了します。
#include <math.h>
#include <stdio.h>
#include <iostream>
using namespace std;
int main() {
int i, e, b, ans = 1;
cout << "Enter the base: " << endl;
cin >> b;
cout << "Enter the exponent: " << endl;
cin >> e;
/*logic to calculate power*/
while (e != 0) {
ans = ans * b;
--e;
}
cout << "The solution is: " << ans;
return 0;
}
出力:
Enter the base:
5
Enter the exponent:
4
The solution is: 625
while
ループ内のステートメントは、for
ループの場合と同様に、b
を ans
で乗算し、その結果を変数 ans
自体に格納することがわかります。
以下は、反復ごとに変数 ans
に含まれるものです。
e = 4
ans = 1 * 5
ans = 5
e = 3
ans = 5 * 5
ans = 25
e = 2
ans = 25 * 5
ans = 125
e = 1
ans = 125 * 5
ans = 625
これは、pow()
関数を使用せずに、while
ループを使用して数値の指数を計算する方法です。
出力に対してさらに他の操作を実行する場合は、次の例に示すように実行できます。
#include <math.h>
#include <stdio.h>
#include <iostream>
using namespace std;
int main() {
int i, e, b, ans = 1;
cout << "Enter the base: " << endl;
cin >> b;
cout << "Enter the exponent: " << endl;
cin >> e;
/*logic to calculate power*/
while (e != 0) {
ans = ans * b;
--e;
}
/*adding 500 to the result*/
ans = ans + 500;
cout << "The solution after addition is: " << ans;
return 0;
}
出力:
Enter the base:
5
Enter the exponent:
4
The solution after addition is: 1125
基数と指数が ints
の場合、これらの方法を使用して指数を計算することをお勧めします。 float
値の場合は、pow()
関数を使用します。
これら両方の方法の複雑さは O(n)
で、n
は指数です。
これまで、数値の累乗を見つけるための通常のループ方法について説明してきました。 同じことを行うための非常に興味深い再帰的ソリューションについて説明しましょう。
C++ で pow()
関数を使用せずに再帰を使用して指数を計算する
以下のコードを見てください。
#include <math.h>
#include <stdio.h>
#include <iostream>
using namespace std;
int product(int a, int b) {
if (b)
return (a + product(a, b - 1));
else
return 0;
}
int calculate_power(int x, int y) {
if (y)
return product(x, calculate_power(x, y - 1));
else
return 1;
}
int main() {
cout << calculate_power(5, 2);
getchar();
return 0;
}
出力:
25
このコードは、乗算を繰り返すための product
と x^y
を見つけるための calculate_power
の 2つの関数を使用します。
main
ブロックが実行されると、まず calculate_power
関数に制御が移ります。 この関数内で、指数 y
の値が 0
の場合、制御は if
ブロックに進み、関数は 1
を返します。
それ以外の場合、制御は if
ブロックに移動し、そこで関数は product
関数を呼び出します。この関数は calculate_power
関数を再帰的に呼び出します。 また、product
関数内では、制御が if
ブロックに移動すると、product
関数が再帰的に呼び出されます。
このコードの動作をよりよく理解するのに役立つ図を次に示します。
Coming down: calculate_pow(5,2)
↓
product(5, calculate_pow(5,1))
↓
product(5, calculate_pow(5, 0)
↓
return 1
Going back, Step 1: product(5, 1)
↓
return 5 + product(5, 0)
↓
return 0
↓
return 5+0 = 5
Going back, Step 2: product(5, 5)
↓
5 + product(5, 4)
↓
5 + 5 + product(5, 3)
↓
5 + 5 + 5 + product(5, 2)
↓
5 + 5 + 5 + 5 + product(5, 1)
↓
5 + 5 + 5 + 5 + 5
↓
25
これは、再帰が数値の累乗を計算する方法です。時間計算量は O(n)
で、n
は指数です。
まとめ
この記事では、C++ で pow()
関数を使用せずに数値の指数を計算する方法について説明しました。 for
と while
ループを使用してこれを行い、数値の累乗を取得したら、他の計算をさらに実行する方法も確認しました。
最も興味深いのは、数値の累乗を計算するための再帰的なソリューションについて説明し、詳細なフローチャートを使用してそのコードの動作を確認したことです。