POJ2273 - An Excel-lent Problem

2273 -- An Excel-lent Problem

中国の方から、メールで、「2273本気でチャレンジしてみてよ!」と言われたのでやってみた。


整数nをExcelの列の表記(1->A , 2->B , ... , 26->Z , 27->AA)に直すのがメインの問題。
ぱっと見、26進法でごにょごにょなんだけど、一工夫必要。

char*p;
main(r,s,c){
  for(;scanf("R%dC%d ",&r,&c),r;puts(p))
    for(itoa(r,p=s+5,10);c;c/=26)
      *--p=--c%26+65;
}

で、100Bまで到達。
p=sにするとRuntime Error。


あと、2959 -- Ball bearingsどうなん?って言われたけど、Ozyさん、nuさんに1B及ばないので答えようが、、、


[追記]
うわぁぁぁぁ。文字列バッファがあるんならrとか最初からそれに書き込めと。

char*p;
main(c,s){
  for(;scanf("R%[^C]C%d ",p=s+5,&c),c;puts(p))
    for(;c;c/=26)
      *--p=--c%26+65;
}

で、90B。


[再追記]
s+5のRuntime Errorの閾値どこまでだろ、と思ってやってみたら、なぜかp=sで通るようになってた。
sの直前のメモリがcに割り当てられて、うまいとこ干渉しなくなったから? なわけないし、、、
あ、違う、メモリが引数とは逆順で割り当てられるからかな。
アセンブリの知識の無さを露呈しております、、、


と、いうことで。

char*p;
main(c,s){
  for(;scanf("R%[^C]C%d ",p=s,&c),c;puts(p))
    for(;c;c/=26)
      *--p=--c%26+65;
}

で、88B。