ACM中的JAVA(基础)
众所周知,Java拥有良好的可移植性。无论在软件还是硬件领域,它都得到了广泛的使用,但是任何语言都有其缺陷,Java也不例外,Java运行在Java虚拟机上,因而相比C/C++,运行速度就只能呵呵了。在ACM当中,也极少有使用的Acmer,本文档仅介绍一下ACM当中Java的一些基本的使用,仅供读者参考,限于作者水平,文章中若有错误或不足之处,恳请读者批评指正。
一、输入(Input)与输出(Output)
1.输入
import java.util.*; // import java.until.Scanner
2.输出
System.out.print();//输出之后不换行,cout System.out.println();//输出之后换行,相当于C++中的。cout<< ... <<endl System.out.printf();//C printf()
3.代码示例
a) UPC‘s Code
//UPC's code import java.util.*; public class Main { public static void main (String args[]) throws Exception { BufferedReader stdin =new BufferedReader(new InputStreamReader(System.in)); String line = stdin.readLine(); StringTokenizer st = new StringTokenizer(line); int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); System.out.println(a+b); } }
b) YQ_beyond's code
//YQ_beyond's code import java.util.*; public class Main{ public static void main(String [] args){ Scanner cin = new Scanner(System.in); int a = cin.nextInt(); int b = cin.nextInt(); System.out.println(a+b); cin.close(); } }
4.Java 中常用的数据输入输出方式
int n = cin.nextInt(); String str = cin.next();//scanf("%s",str) cin>>str double dou = cin.nextDouble(); String str = cin.nextline();//gets(str) cin.getline(); BigInteger B_I = cin.nextBigInteger(); BigDecimal B_D = cin.nextBigDecimal();
......
5.Java输入结束的判断
cin.hasNext(); //判断是否已到文件尾 cin.hasNextInt(); cin.hasNextDouble();
二、JAVA测试文件
像C语言中的freopen,c++中的istream/ostream一样,Java中也有方便的文件API用于ACMer测试。
Java的文件流对象。
FileInputStream fin = new FileInputStream("datain.txt"); PrintStream fout = new PrintStream("dataout.txt");
代码示例(POJ1503)
import java.io.*; import java.math.*; import java.util.*; public class Main{ public static void main(String [] args) throws FileNotFoundException { FileInputStream fin = new FileInputStream("datain.txt"); PrintStream fout = new PrintStream("dataout.txt"); System.setIn(fin); System.setOut(fout); //Scanner cin = new BufferedInputStream(Systtem.in); Scanner cin = new Scanner(System.in) BigInteger n; BigInteger sum = new BigInteger("0"); while(cin.hasNext()) { n = cin.nextBigInteger(); if(n.compareTo(BigInteger.ZERO) == 0) break; sum = sum.add(n); } System.out.println("sum"); cin.close(); } }
三、JAVA的进制转换
Integer.toString(a,i);//将a转化成i进制的串 Integer.parseInt(str,x);//把串当成十进制数转化成int型
代码示例:
import java.io.*; import java.Scanner.*; import java.util.*; import java.text.*; public class Main{ public static void main(String [] args) { String str; Scanner cin = new Scanner(System.in); int a = cin.nextInt(); for(int i = 2; i <= 16; i++) { str = Integer.toString(a,i);//将a转化成i进制的串 System.out.println(str); int b = Integer.parseInt(str,x);//把串当成十进制数转化成int型 System.out.println(b); } } }
四、JAVA中的串
在java中String是可变的,而char[]是不可变的,像C++ STL中的string一样,java的String提供了大量的API。
代码示例:
import java.io.*; import java.util.*; public class Main{ public static void main(String [] args) { Scanner cin = new Scanner(System.in); String str = cin.next(); %for(int i = 0; i < ;) System.out.println(str.charAt(0)); char [] ch; ch = str.toCharArray(); for(int i = 0; i < ch.length; i++) ch[i] += 1; System.out.println(ch); String st = str.substring(2); System.out.println(st); st = str.substring(2,4); System.out.println(st); } }
五、JAVA中的高精度
相比C/C++中需要写大坨的代码来实现高精度四则运算,Java 提供了方便的API。在赛场上,遇到单纯的高精度运算的题目,选择Java现成的API会为其它题目节省时间。Java当中将高精度的数据类型用类进行了封装。
a) 高精度数据类型所在的包
import java.math.*; //BigInteger & BigDecimal
b) 代码示例1
import java.math.*; //高精度数据类型所在的包 import java.util.*; public class Main{ public static void main(String [] args){ Scanner cin = new Scanner(System.in); BigInteger a = new BigInteger("0"); BigInteger b = new BigInteger("0"); a = cin.nextBigInteger(); b = cin.nextBigInteger(); System.out.println(a.add(b)); System.out.println(a.subtract(b)); System.out.println(a.multiply(b)); System.out.println(a.divide(b)); System.out.println(a.mod(b)); } }
c) 代码示例2(POJ2506)
//POJ 2506 import java.math.*; import java.util.*; public class Main{ public static void main(String [] args){ BigInteger []a = new BigInteger[255]; a[0] = BigInteger.ONE; a[1] = BigInteger.ONE; a[2] = a[0] + a[1]; for(int i = 0; i <= 250; i++) a[i] = a[i-1].add(a[i-2].add(a.[i-23])); Scanner cin = new Scanner(System.in); while(cin.hasNext()) { int n = cin.nextInt(); System.out.println(a[n]); } cin.close(); } }