前言
刚试着用java做了poj(北大ACM)的1001,代码在这里,希望能做点小小的贡献,下面说一下用java做poj的几个注意事项。
tips
- java文件的主类,也就是含main方法的类,一定要命名为Main,
就是下面这样
class Main{
public static void main(String[] args) throws IOException {
}
}
2 .
Input
T输入包括多组 R 和 n。 R 的值占第 1 到第 6 列,n 的值占第 8 和第 9 列。
Sample Input
95.123 12
0.4321 20
5.1234 15
6.7592 9
98.999 10
1.0100 12
对于这样的多组输入,采用下面的方法读取不会报错,也就是返回runtime error
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
double R = in.nextDouble();
int n = in.nextInt();
}
3 . 对于时间要求高的题目,换一种输入方式能起到很好的效果,这就是使用StreamTokenizer类(java.io.StreamTokenizer),使用方法如下
public static void main(String[] args) throws IOException {
StreamTokenizer st = new StreamTokenizer( new BufferedReader( new InputStreamReader( System.in ) ) ) ;
double R = 0;
int n = 0;
while ( true ) {
if ( st.nextToken() != st.TT_EOF )
R = ( double )st.nval;
else break;
if ( st.nextToken() != st.TT_EOF )
n = ( int )st.nval;
else break;
System.out.println( new StringRealNumber( R ).power( n ).display() );
}
通过nextToken()的返回值判断读取到的是什么
- TT_EOF,代表读到文件尾,进行结束操作
- TT_EOL,读到行末
- TT_WORD,读取到字符串,通过st.sval(String)读取
- TT_NUMBER,读取到数字,通过st.nval(double)读取
使用后比Scanner读取要快50ms左右。