POJ2273 - 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。