4

基数を変換するプログラムに取り組んでいます。たとえば、8 進数は 8、10 進数は 10 です。 への文字はAZ基数 26 と見なすことができます。

「A」を 0 に、Z を 25 に、「AA」を 27 に、「BA」を 53 に変換したい。

コーディングを開始する前に、紙に書いているので、プロセスを理解しています。まず、533 を base 26 に変換しようとしています。

これを行うのに最適なアルゴリズムは何ですか?

4

4 に答える 4

3

次のように、各文字に「数字」を割り当てる必要があります。

A =  0     N = 13
B =  1     O = 14
C =  2     P = 15
D =  3     Q = 16
E =  4     R = 17
F =  5     S = 18
G =  6     T = 19
H =  7     U = 20
I =  8     V = 21
J =  9     W = 22
K = 10     X = 23
L = 11     Y = 24
M = 12     Z = 25

次に、あなたは に{20,13}なりUNます。

逆変換はUN -> {20,13} -> (20 * 26 + 13) -> 52.

さらなる例として、10163 という数字を試してみましょう。これは、空中から無作為に抜き出されたものです。

これを 26 で割ると、26 未満の数 (つまり 2 倍) になり、小数部分が 0.03402366 の15になります。

これに 26 を掛けると、小数部分が 0.88461516 の0になります。

これに 26 を掛ける23になります(私の電卓では実際には 22.99999416 ですが、最初の除算は 2 ステップだけだったので、ここで終了します。浮動小数点数が丸められるため、わずかな誤差が生じます)。

したがって、「数字」は「{15,0,23}数字」PAXです。うーん、なんたる偶然?

PAX10 進数に戻すには、その

 P * 262 + A * 261 + X * 260

また

  (15 * 676) + (0 * 26) + 23
= 10140      + 0        + 23
= 10163
于 2011-02-04T02:40:09.250 に答える
2

少し戻って、10 進数を見てみましょう。

「147」のような数字は何を意味しますか? というか、「1」、「4」、「7」という文字を並べると何を意味するのでしょうか。

10 進数には 10 桁があり、その後、最初の桁の左側に別の桁を追加し、数が増えるにつれて同様に追加します。したがって、"9" = 9*1 の後に、"10" = 1*10 + 0*1 が得られます。したがって、「147」は 1*10^2 + 4*10 + 7*1 = 147 です。同様に、147/10^2 = 1 という逆方向に進むことができ、これは文字 '1' にマップされます。(147 % 10^2) / 10 = 4、これは文字「4」にマップされます。147 % 10 = 7 で、文字 '7' にマップされます。

これは、任意の基数 N に対して機能します。数値 0 を取得すると、セットの最初の文字にマップされます。数値 1 は 2 番目の文字にマップされ、数値 N-1 が数字セットの最後の文字にマップされるまで同様です。

于 2011-02-04T02:41:14.533 に答える
0

これは何語で書いていますか?Perl でこれを行っている場合は、何年も前に退屈していたときに書いた CPAN モジュール Math::Fleximal を使用できます。無限精度の整数を持つ言語を使用している場合、生活はずっと楽になります。文字を取得して整数の配列に変換し、それを数値に変換する計算を行うだけです。

于 2011-02-04T02:44:44.390 に答える
0

20 と 13 を、基数 26 表記で 20 と 13 を表す記号に変換します。アルファベットの文字を使用しているように聞こえるので、それは UN (A は 0、Z は 25) になります。

于 2011-02-04T02:38:55.130 に答える