こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

○進数の計算

直接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つずれて期待している値とは違う値が返ってきていると思うのですが、考え方で理解することができません。
どうしてこのようなことになるのでしょうか?
頭が混乱して考えても分かりません。よろしくお願いします。

投稿日時 - 2009-04-24 22:39:40

QNo.4906251

困ってます

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

#2です。

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

たぶん問題を出した人が、なんとなくN進数と似ているからそんな問題文にしただけと思います。
その人も0の意味を理解していませんね。

投稿日時 - 2009-04-25 01:02:06

お礼

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

投稿日時 - 2009-04-25 09:11:59

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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


と続くのが正しい書き方です。

投稿日時 - 2009-04-24 23:32:58

補足

考えて見ましたが、やはり混乱してきました・・・

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

投稿日時 - 2009-04-25 00:35:54

お礼

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

投稿日時 - 2009-04-25 00:27:16

ANo.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は特別なものと見なし、記号に置き換えない方が無難です。

投稿日時 - 2009-04-24 22:53:04

お礼

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

投稿日時 - 2009-04-25 00:20:26

あなたにオススメの質問