• ベストアンサー

○進数の計算

直接VisualBasicとは関係ないですが、VBAのプロジェクトで ○進数の考え方で、英字を数値へ 数値を英字へ変換しているのですがどうしても理解できない事があります。 A B C AA AB AC BA ・ ・ ・ 上記のような法則があるとします。 A-Cを数字に置き換えます。 A -> 0 B -> 1 C -> 2 文字→数値の計算式は 1桁目 A-Cの数値×3回毎に繰り上がるので3×1桁目は0乗 2桁目 A-Cの数値×3回毎に繰り上がるので3×2桁目は1乗 Aを数字に置き換えると 1桁目 Aは、0*3の0乗=0です。 期待通りです。 AAを数字に置き換えると 1桁目 Aは、0*3の0乗=0です。 2桁目 Aは、0*3の1乗=0です。 0 + 0 = 0 期待している値は3です。 BCを置き換えると 1桁目 Cは、2*3の0乗=2 2桁目 Bは、1*3の1乗=3 2 + 3 = 4 期待している値は8です。 3を文字に置き換えると 数字÷3回毎に繰り上がるので3 = 商 ・・・余り 余りで、文字列を引いてきます。 3÷3=1 ・・・0 -> A 2桁目は、1回目の商÷3       1÷3=切捨てで0 ・・・1 - > B B + A = BA 期待値はAAです。 これらは、1つずれて期待している値とは違う値が返ってきていると思うのですが、考え方で理解することができません。 どうしてこのようなことになるのでしょうか? 頭が混乱して考えても分かりません。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • chiezo2005
  • ベストアンサー率41% (634/1537)
回答No.3

#2です。 これ問題がおかしいですよ。 N進数という0のあるものに置き換えるから変な風になるので、 単純に A,B,C,AA,AB,AC,AAA・・・ という順にならぶ文字列ととらえればよいのでは? 上記の配列自身は規則性はありますし、全く問題はありません。 この配列をN進数の数字に置き換えるから変になってしまいます。 前の回答にも書きましたが最初のAは実はN進数では AAAAAAAAAAAAAAAAAAAA・・・AAAA と同じですからね。 たぶん問題を出した人が、なんとなくN進数と似ているからそんな問題文にしただけと思います。 その人も0の意味を理解していませんね。

kei2543
質問者

お礼

ありがとうございます。 >これ問題がおかしいですよ。 やはりその時点で間違ってるんですね。 担当者と話し合ってみます。 どうもありがとうございました!

その他の回答 (2)

  • chiezo2005
  • ベストアンサー率41% (634/1537)
回答No.2

最初にかいたAがなにを意味するかですね。 これが0だとするとインド人が発見したといわれている0の意味が判っていませんね。 Aが0なら A=AA=AAA=AAAA・・・・です。 最初の1はあえて書くなら 1=・・・AAAAAAAA・・・・・AAAAAB となります。この不要のAを書かないというのがN進法の表記です。 つまり A B C BA BB BC CA CB CC BAA BAB と続くのが正しい書き方です。

kei2543
質問者

お礼

>これが0だとするとインド人が発見したといわれている0の意味が判っていませんね。 奥深そうですね・・・ >この不要のAを書かないというのがN進法の表記です。 ありがとうございます。理解しました。 実は、進法は全く勉強した事がなかったので、いきなり実践したのがまずかったみたいですね。

kei2543
質問者

補足

考えて見ましたが、やはり混乱してきました・・・ 実は実践では、A-Zでインクリメントしていくという問題なのですが A->B->C・・・Z Zの次はAA・・・ZZの次はAAA といった感じです。このインクリメントに26進法?見たいなのを使ってうまくできないかと考えていたのですが難しくて・・・ イメージとしては、 文字列→数値→数値+1→文字列 といった感じで文字列のインクリメントをしようかと考えているのですが、数値に変換しないとインクリメントできませんよね・・・ う~ん・・・難しい・・・この方法は間違ってるのでしょうか 単純にIF文でZの時は・・・と書いても良いのですが変更が加わったりするとかなり変更しなければいけなくなりそうなので

回答No.1

Aを0と考えているとのことですが、ご質問の例を単純に3進数に置き換えてみましょう。 A → 0 B → 1 C → 2 AA → 00 AB → 01 AC → 02 BA → 10 : : わかりましたか? Aを0と考えると、AとAAは、0と00、つまり同じになってしまうのです。 0は特別なものと見なし、記号に置き換えない方が無難です。

kei2543
質問者

お礼

ありがとうございます。 >0は特別なものと見なし、記号に置き換えない方が無難です。 0が何か邪魔な数値だとは思っていましたが、例で書いて頂くとやはりそうですね 2進数では、0は無意味な数値で扱われているのに私の考えてたのは0が意味するのでやりにくいと感じていました ↑ちょっとわかりにくいですが。。

関連するQ&A