目錄
Java在ACM/ICPC中的特點
在ACM/ICPC中使用Java需要注意的問題
Java與高精度計算
Java的語法和C++幾乎相同
Java在執行計算密集任務的時候并不比C/C++慢多少,只是IO操作較慢而已
Java 簡單而功能強大,有些東西用Java實現起來更為方便
比如:輸入輸出、字符串解析、高精度
Java不易犯細微的錯誤
C/C++中的指針
“if (n = m) ... ”
Java與Eclipse
2.在ACM/ICPC中使用Java需要注意的問題java程序結構JDK1.5.0新增的Scanner類很適合用于AMC/ICPC的輸入
使用Scanner類的一般步驟
1.導入Scanner類
import java.util.Scanner;
2.創建Scanner類的對象Scanner cin=new Scanner(System.in); //從標準輸入讀入數據
Scanner cin=new Scanner(“12 30”)); //從字符串讀入數據
3.使用Scanner類的對象讀入各種類型的數據cin.nextInt()
cin.nextDouble();
…
Scanner類的常用方法1.讀入數據Scanner類方法 | 對應C操作 | 對應C++操作 |
int n = cin.nextInt(); | scanf("%d", &n); | cin >> n; |
String s = cin.next(); | scanf("%s", s); | cin >> s; |
double t = cin.nextDouble(); | scanf("%lf", &t); | cin >> t; |
String s = cin.nextLine(); | gets(s); | cin.getline(...); |
BigDecimal b=cin.nextBigDecimal(); |
cin.hasNext() 或 cin.hasNextInt() 或 cin.hasNextDouble()
Scanner類的用方法示例:
import java.util.*;public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); while(sc.hasNext()){ char ch=(char)sc.nextInt(); System.out.PRint(ch); } }}標準輸出System.out.print(…); //不輸出換行System.out.println(…); //輸出換行
import java.io.*;public class Main{ static PrintStream cout=System.out; public static void main(String[] args){ int n=3,m=5; cout.println(n); // 輸出3 //同一行輸出多個整數可以用 cout.println(n+" "+m); }}
用DecimalFormat類控制浮點數小數位數
import java.text.DecimalFormat;
控制方法
構造特定的DecimalFormat對象:DecimalFormat f=new DecimalFormat(“#.00#”);
構造函數中的參數是模式字符串,0指一位數字,#指除0以外的數字
使用DecimaFormat對象格式化需要輸出的浮點數:System.out.println(f.format(12.1234));
DecimalFormat示例
import java.text.*;public class decimalformat{ public static void main(String[] args){ DecimalFormat f = new DecimalFormat("#.00#"); DecimalFormat g = new DecimalFormat("0.000"); double a = 123.4509, b = 0.12; System.out.println(f.format(a)); System.out.println(g.format(a)); System.out.println(f.format(b)); System.out.println(g.format(b)); }}
運行結果:
123.451
123.451
.12
0.120
格式化輸出的另一種方法是利用System.out.printf(“格式字符串”,…),其用法和c的printf基本一致int a=10;float b=2.35f;System.out.printf("%d %10.5f/n", a, b);字符串(String)
String類常用方法:
構造字符串:String s=“abcde”;char[] chs={‘a’,’b’,’c’,’d’,’e’};String s=new String(chs);取得字符串中某個字符:
char ch=s.charAt(1); //ch=‘b’;求子串:
System.out.println(s.substring(0, 3)) // output “abc"System.out.println(s.substring(1, 3)) // output “bc"System.out.println(s.substring(1)) // output “bcde"拆分字符串:
String s=“123:34:55”;String[] ss = s.split(“:”);for(int i=0;i<ss.length;i++) System.out.println(ss[i]);
運行結果:
123
34
55
替換字符串:String s=“2009-07-26”;System.out.println( s.replace(‘-’,’//’) ); //輸出2009/07/26String s=“0.123456”;System.out.println( s.replaceAll(“^0”,””) ); //輸出.123456
String中的字符不能改變,如果需要改變可以使用StringBuffer
其他注意的事項Java數組是對象,定義后必須初始化,如 int[] a = new int[100];數組長度由length成員得到,如System.out.println(a.length);
Arrays類提供的一些有用方法:
Arrays.fill()
Arrays.sort()
Arrays.binarySearch()
布爾類型為 boolean,只有true和false二值,在 if (...) / while (...) 等語句的條件中必須為boolean類 型。
在C/C++中的 if (n % 2) ... 在Java中無法編譯通過。
Java也提供了類似STL的集合類:
Vector,ArrayList,Map,Queue,Stack,Hashtable
3.Java與高精度計算PKU1001-exponentiation(求冪):Sample Input
95.123 12
0.4321 20
5.1234 15
6.7592 9
98.999 10
1.0100 12
Sample Output
548815620517731830194541.899025343415715973535967221869852721
. 00000005148554641076956121994511276767154838481760200726351203835
429763013462401
43992025569.928573701266488041146654993318703707511666295476720493
953024
29448126.764121021618164430206909037173276672
90429072743629540498.107596019456651774561044010001
1.126825030131969720661201
用C/C++解決的方法
C/C++的pow函數無法達到需要的精度
C/C++用數組來模擬乘法運算提高精度
java代碼:import java.math.*;import java.util.*;public class Main{ public static void main(String[] args){ Scanner in=new Scanner(System.in); while(in.hasNext()){ BigDecimal val=in.nextBigDecimal(); int n=in.nextInt(); BigDecimal ret=val.pow(n).stripTrailingZeros(); System.out.println( ret.toPlainString().replaceAll("^0", "") ); } }}
BigDecimal類
高精度的有符號十進制數字構造一個高精度數字BigDecimal (int val)
BigDecimal (double val)
BigDecimal (String val)
BigDecimal d1=new BigDecimal(1);BigDecimal d2=new BigDecimal(0.1);BigDecimal d3=new BigDecimal("0.1"); System.out.println("d1="+d1);System.out.println("d2="+d2);System.out.println("d3="+d3);BigDecimal類常用方法:
BigDecimal add(BigDecimal augend) // “+”BigDecimal subtract(BigDecimal subtrahend) // “-”BigDecimal multiply(BigDecimal multiplicand) // “*”BigDecimal divide(BigDecimal divisor) // “/”BigDecimal remainder(BigDecimal divisor) // “%”BigDecimal pow(int n) //“求冪”String toPlainString() //返回不帶指數的字符串表示String toString() //返回帶指數的字符串表示PKU高精度計算題目:
1131、1205、1220、1405、1503、1604 1894、2084、2305、2325、2389、2413 3101、3199
新聞熱點
疑難解答