PKU1001 累乗数えるんじゃね?

id:Ozy:20060712の文章を受けて公開公開


とはいっても殆ど違いなんてなかったり。
まず最初に書いたのはこれ

import java.util.*;
class Main{
  static{
    for(Scanner i=new Scanner(System.in);;)
      System.out.println(i.nextBigDecimal().
        pow(i.nextInt()).toPlainString().
        replaceAll("^0|\\.?0*$",""));
      }
}

forで終端判定をしなくてもいずれnextBigDecimalが例外を投げて終了するだろうから問題なし。
......と思ってコンパイラにかけましたがエラーが出ました。

  • Main.java:1: 初期化子は正常に完了できなければなりません。

どうやら無限ループっぽいのはだめっぽいです。

というわけで回避するために自分が選択したのはコンパイラを誤魔化す方法です。

import java.util.*;
class Main{
  static{
    for(Scanner i=new Scanner(System.in);i==i;)
      System.out.println(i.nextBigDecimal().
        pow(i.nextInt()).toPlainString().
        replaceAll("^0|\\.?0*$",""));
  }
}

i==iは定数式だとコンパイラが解析できないのを利用しました。
ただ、これでも上位の人たちは4byteの大差があります。
必死こいて方法を考えましたが検討がつかず。
うむむ。