C++で数値のパリティ(奇偶性)を求めるプログラム
このチュートリアルでは、C++を使って数値のパリティ(奇偶性)を求める方法について解説します。
パリティとは、ある数値を2進数で表したときに含まれる「1」の個数が、奇数であるか偶数であるかを指します。本記事では、入力として与えられた数値のパリティを効率的に判定するアルゴリズムを紹介します。
パリティの求め方
ここで紹介する手法では、ビット演算を活用します。ポイントとなるのは n & (n - 1) という式です。この式は、n の最下位にある「1」のビットを消去する働きがあります。この操作を n が 0 になるまで繰り返し、ループが回った回数(=1のビットの個数)から奇偶を判定します。
C++での実装例
# include<bits/stdc++.h>
# define bool int
using namespace std;
// 与えられた数値のパリティを求める関数
bool getParity(unsigned int n) {
bool parity = 0;
while (n){
parity = !parity; // ビットを1つ処理するごとに反転
n = n & (n - 1); // 最下位の1ビットを消去
}
return parity;
}
int main() {
unsigned int n = 7;
cout<<"Parity of no "<<n<<": "<<(getParity(n)? "Odd": "even");
getchar();
return 0;
}コードの解説
parity = !parity;… 1のビットを1つ見つけるたびにフラグを反転させます。n = n & (n - 1);… Brian Kernighanのアルゴリズムと呼ばれる技法で、n の中で最も右側にある1のビットを取り除きます。- ループは「1」の個数分だけしか回らないため、全ビットを走査する方法よりも高速です。
出力結果
上記のプログラムを実行すると、次のような結果が出力されます。
Parity of no 7: odd
数値7は2進数で 111 と表され、「1」が3つ(奇数個)含まれているため、パリティは「odd(奇数)」と判定されます。
-
C++で三角形の重心を求めるプログラムの作成方法
この記事では、三角形の3つの頂点の座標を格納した2次元配列が与えられたときに、その三角形の重心を求めるC++プログラムの作成方法を解説します。 三角形の重心とは、三角形の3本の中線がすべて交わる点のことです。 また、三角形の中線とは、ある頂点と、その対辺(向かい合う辺)の中点を結ぶ線分のことを指します。 それでは、具体的な例を使って問題を確認してみましょう。 入力 (-3, 1), (1.5, 0), (-3, -4) 出力 (-1.5, -1) 説明 重心 (x, y) = ((-3 + 1.5 - 3) / 3, (1 + 0 - 4) / 3) = (-1.5, -1) 解法のアプロ
-
C++で平行四辺形の面積を求めるプログラムの作成方法
この記事では、平行四辺形の底辺と高さを表す2つの値が与えられたとき、C++を使ってその面積を求めるプログラムを作成する方法を解説します。 平行四辺形とは? 平行四辺形とは、4つの辺からなる閉じた図形であり、向かい合う2組の辺がそれぞれ長さが等しく、互いに平行になっている四角形のことです。 問題を理解するための具体例 入力 B = 20, H = 15 出力 300 説明 平行四辺形の面積 = 底辺 × 高さ = 20 × 15 = 300 解決アプローチ この問題を解くには、平行四辺形の面積を求める幾何学の公式を使用します。 面積 = 底辺 × 高さ つまり、与えられた底辺と高さを掛け合わせ