2013-04-03 7 views

答えて

9

をこのコードは何が必要ない機能a2nを示し

出力

A = 1 
B = 2 
C = 3 
AA = 27 
AB = 28 
AC = 29 
BA = 53 
BB = 54 
BC = 55 

対応n2aこの

sub n2a { 
    my ($n) = @_; 
    my @a; 
    while ($n > 0) { 
    unshift @a, ($n-1) % 26; 
    $n = int(($n-1)/26); #Edited for failing corner case 
    } 
    join '', map chr(ord('A') + $_), @a; 
} 
-1

本当にモジュールが必要ですか?

my $n = 55; 
my $s = 'A'; 
$s++ while --$n; 
print "$s\n"; 
+0

のように見えますが、あなたは、 '$-S-しばらく行った場合、これは壊れる - $ N 'を。 '-1'(いくらかの負の数)で終わるでしょうか? – chrsblck

+0

@chrsblck自動減算演算子は魔法ではなく、増分演算子だけです。これはperldoc perlopに書かれています。 – TLP

+0

@TLP正確に私の意見。 – chrsblck

3

..オペレータではかわいいトリックがあります。試してみてください:

print join ",",("A".."ZZ"),"\n" 

または

my @a = ("A".."ZZ"); 
print $a[56],"\n"; 

あなたがが、要素の数千人の数百に上るとしている場合、これは本当に良い方法ではありません。それで、あなたは自分自身で基数26の数学(非常に簡単な数学)をするのが良いです。

6

まあ、Perlはあなたのニーズに合うかもしれない、範囲内の文字を扱うことができます。

my @letters = 'A' .. 'BC'; # A B C ... Z AA AB AC etc. 

その後、あなたは、単に行うことができます。

my $letter = $letter[$foo - 1]; # 1 -> A, 2 -> B ... 
関連する問題