スタックを使って10進数を任意の基数に変換する方法
概要:スタックによる基数変換の仕組み
10進数を2進数や8進数など、任意の基数に変換する際には「スタック」を利用すると効率的です。変換の基本は、割り算の余りを順番にスタックへ積み込み(Push)、最後に取り出し(Pop)ながら出力すること。スタックは後入れ先出し(LIFO)構造のため、自然と上位の桁から正しい順序で結果が得られます。
1. 変換したい基数を変数に設定する
まず、計算したい基数を格納する変数を用意します。ここでは例として2進数に変換するため、変数 baseNum に 2 を設定します。
int baseNum = 2;
同様に、8進数へ変換したい場合は次のように設定を変更します。
int baseNum = 8;
さらに、この値をユーザーからの入力として受け取るようにすれば、実行時に柔軟に基数を指定できるようになります。
2. 余りをスタックに積み込む
続いて、スタックを生成し、数値を基数で割った余りを順にプッシュしていきます。
Stack s = new Stack();
do {
s.Push(n % baseNum);
n /= baseNum;
} while (n != 0);
この処理では、n % baseNum で余りを求めてスタックに Push し、n /= baseNum で商を次のループに引き継ぎます。n が 0 になるまで繰り返すことで、下位の桁から順に値が積み上がっていきます。
3. ポップして結果を表示する
すべての余りをスタックに積み込んだら、あとは Pop を繰り返して要素を取り出すだけです。LIFO構造のおかげで、最上位の桁から順に値が取り出され、正しい桁順の変換結果が得られます。
例えば、変換する数値 n が 45 の場合、2進数では次のような結果になります。
Result...
101101
まとめ
スタックの Push / Pop 操作を組み合わせることで、シンプルなコードでありながら、10進数から2進数・8進数など任意の基数への変換を確実に実装できます。基数を変数化しておけば、同じロジックをさまざまな進法変換に流用できるのも大きなメリットです。
-
Redis入門:インストールから基本コマンドと5つのデータ構造まで徹底解説
Redisとは?高速かつ柔?高速かつ柔軟なデータ構造サーバーRedisはその高速性と柔軟性により、開発者にとって非常に強力なツールであり、多彩な用途に活用できます。しばしば「キーバリューストア」と呼ばれますが、実際には「データ構造サーバー」と表現する方が正確です。というのも、Redisは以下の5種類のデータ構造をサポートしているからです。文字列(Strings)ハッシュ(Hashes)リスト(Lists)セット(Sets)ソート済みセット(Sorted Sets)各データ構造には共通のコマンドが用意されているほか、特定のデータ構造専用のコマンドも存在します。本記事では、Redisの基本的な使い
-
iPhoneのFace IDに別の顔を登録する方法【iOS 12以降の「代替の外観」設定】
iPhone Xとともに登場したFace IDは、多くの人を魅了しました。ティム・クックCEOが「スマートフォンの未来」とまで語ったこの生体認証システムにより、ユーザーはパスコードを入力することなく、自分の顔だけでiPhoneのロックを解除できるようになりました。 しかし当初のFace IDには一つ大きな制約がありました。それは、ロック解除用として登録できる顔が「1人分だけ」という点です。セキュリティの観点からは理にかなっていますが、緊急時に家族や信頼できる人にスマホを使ってもらいたい場面では、かえって不便に感じることもありました。 そんな悩みはiOS 12で解決されました。「代替の外観(Al