作者: Tsutomu Hiroshima
日時: 2003/10/21(13:56)
廣島です.

slashdot.jp の解は正しいですか????

a => 0, b => 1 のように,0 から始めているのは良いとして,

aaa => 77 と 3 文字以上になる場合は考えてないようです.
# Excel には 3 文字以上のラベルは無いのかな?

a => 1 から始めた場合,aaa は a-z, aa-zz の次ですから,
aaa => 1 + 26 + 26*26 = 703 の筈ですね.

ところで,くすのきさんの方法

>	  dec = 0
>         for (i = 0; i < keta ; i++) {
>                 dec = dec + excel[substr(row, keta - i, 1)]*26^i
> 
>         }

では ABCD の場合の計算,

1*26^3 + 2*26^2 + 3*26 + 4 = 19010

を D から始めることになります,つまり

((4 + 3*26) + 2*26^2) + 1*26^3

です.しかし,A から始めた方が ^ を含め積の回数が
少なくなって効率は良いはずです.(少なくとも C 言語のレベルで)

((1*26 + 2)*26 + 3)*26 + 4 

これだと積は 3 回だけです.

perl の例を 1 つ.

sub labelConv {
  my $label = shift;
  my $base = ord('A') - 1;
  my @seq = map { ord($_) - $base } split(//, uc $label);
  my $num = 0;
  foreach my $x (@seq) {
    $num = $num * 26 + $x;
  }
  return $num;
}

-----------------------------
	廣島 勉
	(tsutomu@...)