C++でa^nとb^nのどちらが大きいかを判定するプログラム
はじめに
このチュートリアルでは、an と bn のうち大きい方の値を求めるC++プログラムについて解説します。
3つの整数 a、b、n が与えられます。私たちのタスクは、an と bn を計算し、そのうち大きい方の値を判定して出力することです。
解き方のポイント
単純に考えると、実際にべき乗を計算して比較すればよいように思えます。しかし、n が大きくなるとオーバーフローのリスクがあり、非効率です。
そこで注目したいのが、べき乗関数 y = xn の性質です。
- n が偶数の場合: xn は常に0以上になるため、|a| と |b| の大小関係がそのまま結果に反映されます。
- n が奇数の場合: xn の符号は x の符号と一致するため、a と b の大小関係がそのまま結果に反映されます。
つまり、べき乗を実際に計算しなくても、n の偶奇に応じて「絶対値」または「元の値」を比較するだけで答えが分かるのです。
アルゴリズム
- n が偶数かどうかを判定します。
- n が偶数なら、a と b の絶対値を取ります。
- a と b を比較し、結果を出力します。
サンプルコード
#include <bits/stdc++.h>
using namespace std;
// 大きい方の値を判定する関数
void findGreater(int a, int b, int n) {
// n が偶数の場合は絶対値で比較
if (!(n & 1)) {
a = abs(a);
b = abs(b);
}
if (a == b)
cout << "a^n is equal to b^n";
else if (a > b)
cout << "a^n is greater than b^n";
else
cout << "b^n is greater than a^n";
}
int main() {
int a = 12, b = 24, n = 5;
findGreater(a, b, n);
return 0;
}実行結果
b^n is greater than a^n
コードの解説
この例では、a = 12、b = 24、n = 5 としています。n = 5 は奇数なので絶対値を取らず、元の値をそのまま比較します。12 < 24 であるため、「b^n is greater than a^n」と出力されます。
もし n が偶数だった場合はどうでしょうか。例えば a = -12、b = -24、n = 4 のような入力では、(-12)4 = 20736、(-24)4 = 331776 となり、絶対値を取ってから比較することで正しく判定できます。このように、本アルゴリズムはべき乗計算を一切行わずに O(1) で答えを求められる点が大きなメリットです。
-
C++でアナログ時計の時針と分針の間の角度を求めるプログラム
アナログ時計の時刻を表す「時(hour)」と「分(minute)」の2つの値が与えられたとき、時針と分針がなす角度のうち、小さい方の角度を求める問題です。たとえば、hour = 12、minutes = 45 が入力された場合、答えは 112.5度 となります。解き方の考え方まず、それぞれの針がどれだけ回転するかを理解しましょう。時計盤は一周360度です。時針は12時間で360度回るため、1時間あたり30度動きます。さらに分の経過に合わせて少しずつ進むので、1分あたり0.5度ずつ移動します。分針は60分で360度回るため、1分あたり6度ずつ移動します。この性質をもとに、以下の手順で角度を計算で
-
sin(x)とcos(x)の値を計算するC++プログラムの解説
sin(x)とcos(x)の値を計算するC++プログラム 本記事では、角度を入力として受け取り、その角度に対応するsin(x)(正弦)とcos(x)(余弦)の値を計算して結果を表示するC++プログラムを解説します。ライブラリ関数に頼らず、テイラー展開(マクローリン展開)を用いて数値を近似する手法を紹介します。 sin(x)とは sin(x)は三角関数の一つで、角度xに対する正弦の値を求めるために使用されます。直角三角形では、斜辺に対する対辺の比として定義されます。 $$\sin (x) = \displaystyle\sum\limits_{k=0}^\infty \frac{(-1)^{k