- ベストアンサー
n進法→m進法への変換
やりなおしのSPI問題に頭を痛めています。10進法→n進法、n進法→10進法、というやり方はそれぞれ理解できますが、以下のような応用になると、うまくできません。どなたか、宜しくお願いします! 例題1 3進法で3桁の数は何個あるか。 (書き出していくとわかるのですが、それ以外に何か公式のようなもので求める方法がありますでしょうか。他の進数になるとたちまち困ります。) 例題2 3進法の112201は5進法でいくらか。 (いったん10進法に直さずに、n進法→m進法への変換をダイレクトに行なえ、効率的でわかりやすい方法はありますでしょうか。)
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
ヒント 例題1 一応正整数(固定小数点)と仮定します。 3進法の最大数は(222)3=2*3^2+2*3^1+2*3^0 =18+6+1=25 最小は(000)3=0ですから何個か分かりますね? 例題2→3進法→10進法→5進法 (112201)3=4*3^4+8*3^2+1=4*9^2+8*9+1=397 =79*5+2 =(15*5+4)*5+2 =((3*5+0)*5+4)*5+2 =>5進法 >n進法→m進法への変換をダイレクトに行なえ、効率的でわかりやすい方法はありますでしょうか。 一般的には良い方法ありません。 ただし、 2進法-4進法,2進法-8進法,2進法-16進法 3進法-9進法 4進法-16進法 5進法-25進法 のようにn進法と(n^k)進法の間ではダイレクトに変換できます。 ですから、 計算機のソフトや情報処理を扱う技術者の間では 2進法-8進法,2進法-16進法 が良く使われてきたし、 また2進法と10進法の変換を見かけ上で行う2進化10進法やV4のIPアドレス(32ビットの2進数)をドット区切り10進数の4組で表すことが行われたりしているわけです。 これらは一般的にn進法の変換が簡単にいかないために変換しやすい変換だけあつかったり、見かけ上2進数を10進数との関連付ける便法が採用されているわけです。 決して質問者さんだけが任意のn進法を別のm進法に変換するのに困っているわけではないですね。
その他の回答 (5)
- maimait
- ベストアンサー率38% (5/13)
#4です。 >割り算の最後の<+1>のところが<+2>の単純ミスのようです。 確かに明らかな単純ミスね。自らややこしいと書いたダイレクト変換での計算ミスを出してしまったようでお恥ずかしい限りです。 oyaoya65さん、ご指摘ありがとうございました。
- oyaoya65
- ベストアンサー率48% (846/1728)
#3です。 A#2,A#3では (112201)3 =(397)10 となっています。 私もA#4さんのダイレクト割り算もやっていましたが計算ミスする恐れがあったので回答から省きました。 ダイレクト割り算も出来るのはA#4さん回答の通りですが 112201 の割り算の最後の<+1>のところが<+2>の単純ミスのようです。 <+1>だと10進数に直すと396になります。 (確認してみてください。) そこだけ直せばダイレクトな割り算でもいけますね。 >=2221*12+1 >=(120*12+11)*12+1 >=((10*12+0)*12+11)*12+1 最後の式はA#3の >=((3*5+0)*5+4)*5+2 の式に対応しています。
- maimait
- ベストアンサー率38% (5/13)
例題2 ややこしいので不要と思われるけど、ダイレクト変換方法。 十進法以外での計算(割り算の筆算)で混乱しないなら、 3進法のまま5(3進法では12)で割りつづけ、 余りを順に出せば5進法の各桁が出てきます。 112201 =2221*12+1 =(120*12+11)*12+1 =((10*12+0)*12+11)*12+1 以下は答えになるので略 上の説明で混乱するor難しいようだったら、素直に十進を経由することをお薦めします。 何進数での変換も同じ要領でできることは確認していますが、10進数でない計算を苦もなくできる人向けかも。
- ma-chan45
- ベストアンサー率31% (46/145)
たびたびすみません。 NO.1です。 例題2ですが、やはり、一度10進数に直してやるのが一番分かりやすくて間違いが少ない方法だと思います。 112201(3) =(3^5x1)+(3^4x1)+(3^3x2)+(3^2x2)+(3^1x0)+(3^0x1) =397(10) この397を5進数に直してあげればよいかと思います。
- ma-chan45
- ベストアンサー率31% (46/145)
こんにちは 例題1のほうだけですが・・・・・ 3進法ということは、0・1・2の3つの数字のみをつかいますよね。 3桁ということは、この3つの数字がそれぞれ3回づつ使われる、ということなので、3桁の数は【 3×3×3 】個。 と、言いたいところですが、しかし、3桁目(一番大きい桁)に「0」を使うことはありませんので、 結局は【 2×3×3 】個、3桁の数がある、ということになります。 これでいいんじゃないかな、と思いますが・・・・。 例題1だけの回答ですいません。