C++で16進数の英字(A〜F)を数える方法
開始値と終了値を持つ範囲が与えられ、その範囲内に存在する16進数の英字(A〜F)の個数を計算するのが本記事の課題です。
16進数の英字とは?
コンピュータの分野において、16進数とは基数が16である数値体系のことです。これは、2進数のデータを16進数の1桁でコンパクトに表現できることを意味します。16進数は0から15までの整数で構成されており、10は「A」、11は「B」、12は「C」、13は「D」、14は「E」、そして15は「F」という英字で表されます。
そのため、以下のプログラムでは、指定された範囲内に16進数の英字(A〜F)がいくつ含まれているかを判定・集計します。
具体例
入力 − start = 10, End = 13 出力 − 4
解説 − 10から13の間には4つの16進数が存在します。すなわち、10は「A」、11は「B」、12は「C」、13は「D」に対応します。
入力 − start = 15, End = 16 出力 − 1
解説 − この範囲に含まれる16進数の英字は1つだけです。15は「F」に対応し、16は「10」と表されます。
プログラムで使用するアプローチ
範囲の開始値と終了値を、それぞれ変数 start および end として受け取ります。
カウントを格納するための変数 count を宣言し、0で初期化します。
i を start から始め、i が end 以下である間、for ループを実行します。
ループ内で、i が10以上かつ15以下である場合は、count を1増やします。
それ以外の場合で、i が15より大きいときは次の処理に進みます。
一時変数 temp に i の値を設定し、temp が0でなくなるまで while ループで処理を繰り返します。
temp % 16(temp を16で割った余り)が10以上であるかどうかを判定します。
条件を満たしていれば count を1増やします。
その後、temp を temp / 16 で更新し、上位の桁へ処理を移します。
最後に count の値を返します。
結果を出力して完了です。
サンプルコード
#include <iostream>
using namespace std;
// 16進数の英字の総数を数える関数
int counthexa(int start, int end){
int result = 0;
for (int i = start; i <= end; i++){
// 10から15までのすべての16進数の英字
if (i >= 10 && i <= 15){
result++;
}
// i が15より大きい場合、数値が0より大きい間
// 繰り返し16での剰余を計算する
// 数値 % 16 が10以上ならカウントを増やす
else if (i > 15){
int k = i;
while (k != 0){
if (k % 16 >= 10){
result++;
}
k = k / 16;
}
}
}
return result;
}
// メイン関数
int main(){
int start = 10, end = 60;
cout << "count is: "<<counthexa(start, end);
return 0;
}
出力結果
上記のコードを実行すると、以下の出力が生成されます −
count is: 21
-
【C++】長方形に含まれる正方形の総数を求めるアルゴリズムと実装
縦の長さL、横の幅B(L≥B)の長方形が与えられたとします。この記事では、L×Bの長方形の中にいくつの正方形が含まれているかを効率的に求める方法を解説します。 上の図は3×2の長方形の例です。この長方形には、2×2の正方形が2個、1×1の正方形が6個含まれています。 合計:6+2=8個 規則性を見つける まず、正方形だけで構成されたB×Bの図形について考えてみましょう。 サイズL×Bの長方形には、必ずL×B個の1×1の正方形が含まれます。 含まれる最大の正方形のサイズはB×Bです。 L=B=1の場合:正方形の数=1 L=B=2の場合:正方形の数=1+4=5(2×2が1個、1×1が4個) L
-
C++で16進数を10進数に変換するプログラムの作成方法
16進数が入力として与えられたとき、その16進数を10進数に変換するのが本記事のテーマです。 コンピュータにおける16進数は基数16で表現され、10進数は基数10で表現されます。10進数では0〜9の数字のみを使用しますが、16進数では0〜15までの値を扱うことができ、10以上の値はそれぞれA(10)、B(11)、C(12)、D(13)、E(14)、F(15)という英字で表されます。 16進数から10進数への変換手順 16進数を10進数に変換するには、以下の手順に従います。 右端の桁から順に数字を取り出し、0から始まるべき乗を掛けていきます。指数は「桁数 − 1」になるまで1ずつ増やします。