ACM中java的使用(一)

這裏指的java速成,只限於java語法,包括輸入輸出,運算處理,字符串和高精度的處理,進制之間的轉換等,能解決OJ上的一些高精度題目。


1. 輸入:

格式爲:Scanner cin = new Scanner (new BufferedInputStream(System.in));

例程:

[java] view plain copy
 print?
  1. import java.io.*;  
  2. import java.math.*;  
  3. import java.util.*;  
  4. import java.text.*;  
  5. public class Main  
  6. {  
  7.     public static void main(String[] args)   
  8.     {  
  9.         Scanner cin = new Scanner (new BufferedInputStream(System.in));  
  10.         int a; double b; BigInteger c; String st;  
  11.         a = cin.nextInt(); b = cin.nextDouble(); c = cin.nextBigInteger(); d = cin.nextLine(); // 每種類型都有相應的輸入函數.  
  12.     }  
  13. }  


2. 輸出

函數:System.out.print(); System.out.println(); System.out.printf();

System.out.print(); // cout << …;

System.out.println(); // cout << … << endl;

System.out.printf(); // C中的printf用法類似.

例程:

[java] view plain copy
 print?
  1. import java.io.*;  
  2. import java.math.*;  
  3. import java.util.*;  
  4. import java.text.*;  
  5. public class Main  
  6. {  
  7.     public static void main(String[] args)   
  8.     {  
  9.         Scanner cin = new Scanner (new BufferedInputStream(System.in));  
  10.         int a; double b;  
  11.         a = 12345; b = 1.234567;  
  12.         System.out.println(a + " " + b);  
  13.         System.out.printf("%d %10.5f\n", a, b); // 輸入b爲字寬爲10,右對齊,保留小數點後5位,四捨五入.  
  14.     }  
  15. }  


規格化的輸出:

函數:

[java] view plain copy
 print?
  1. // 這裏0指一位數字,#指除0以外的數字(如果是0,則不顯示),四捨五入.  
  2.     DecimalFormat fd = new DecimalFormat("#.00#");  
  3.     DecimalFormat gd = new DecimalFormat("0.000");  
  4.     System.out.println("x =" + fd.format(x));  
  5.     System.out.println("x =" + gd.format(x));  


3. 字符串處理

java中字符串String是不可以修改的,要修改只能轉換爲字符數組.

例程:

[java] view plain copy
 print?
  1. import java.io.*;  
  2. import java.math.*;  
  3. import java.util.*;  
  4. import java.text.*;  
  5. public class Main  
  6. {  
  7.     public static void main(String[] args)   
  8.     {  
  9.         int i;  
  10.         Scanner cin = new Scanner (new BufferedInputStream(System.in));  
  11.         String st = "abcdefg";  
  12.         System.out.println(st.charAt(0)); // st.charAt(i)就相當於st[i].  
  13.         char [] ch;  
  14.         ch = st.toCharArray(); // 字符串轉換爲字符數組.  
  15.         for (i = 0; i < ch.length; i++) ch[i] += 1;  
  16.         System.out.println(ch); // 輸入爲“bcdefgh”.  
  17. if (st.startsWith("a")) // 如果字符串以'0'開頭.  
  18.         {  
  19.             st = st.substring(1); // 則從第1位開始copy(開頭爲第0位).  
  20.         }  
  21.     }  
  22. }  


4. 高精度

BigIntegerBigDecimal可以說是acmer選擇java的首要原因。

函數:add, subtract, divide, mod, compareTo等,其中加減乘除模都要求是BigInteger(BigDecimal)BigInteger(BigDecimal)之間的運算,所以需要把int(double)類型轉換爲BigInteger(BigDecimal),用函數BigInteger.valueOf().

例程:

[java] view plain copy
 print?
  1. import java.io.*;  
  2. import java.math.*;  
  3. import java.util.*;  
  4. import java.text.*;  
  5. public class Main  
  6. {  
  7.     public static void main(String[] args)   
  8.     {  
  9.         Scanner cin = new Scanner (new BufferedInputStream(System.in));  
  10.         int a = 123, b = 456, c = 7890;  
  11.         BigInteger x, y, z, ans;  
  12.         x = BigInteger.valueOf(a); y = BigInteger.valueOf(b); z = BigInteger.valueOf(c);  
  13.         ans = x.add(y); System.out.println(ans);  
  14.         ans = z.divide(y); System.out.println(ans);  
  15.         ans = x.mod(z); System.out.println(ans);  
  16.         if (ans.compareTo(x) == 0) System.out.println("1");  
  17.     }  
  18. }  


5. 進制轉換

java很強大的一個功能。

函數:

[java] view plain copy
 print?
  1. String st = Integer.toString(num, base); // 把num當做10進制的數轉成base進制的st(base <= 35).  
  2. int num = Integer.parseInt(st, base); // 把st當做base進制,轉成10進制的int(parseInt有兩個參數,第一個爲要轉的字符串,第二個爲說明是什麼進制).     
  3. BigInter m = new BigInteger(st, base); // st是字符串,base是st的進制.  

1.如果要將一個大數以2進制形式讀入 可以使用cin.nextBigInteger(2); 

當然也可以使用其他進制方式讀入;

2.如果要將一個大數轉換成其他進制形式的字符串 使用cin.toString(2);//將它轉換成2進製表示的字符串

例程:POJ 2305

[java] view plain copy
 print?
  1. import java.io.*;  
  2. import java.util.*;  
  3. import java.math.*;  
  4. public class Main  
  5. {  
  6.     public static void main(String[] args)  
  7.     {  
  8.         int b;  
  9.         BigInteger p,m,ans;  
  10.         String str ;  
  11.         Scanner cin = new Scanner (new BufferedInputStream(System.in));  
  12.         while(cin.hasNext())  
  13.         {  
  14.             b=cin.nextInt();  
  15.             if(b==0)  
  16.                 break;  
  17.             p=cin.nextBigInteger(b);  
  18.             m=cin.nextBigInteger(b);  
  19.             ans=p.mod(m);  
  20.             str=ans.toString(b);  
  21.             System.out.println(str);  
  22.         }  
  23.     }  
  24. }  


6. 排序

函數:Arrays.sort();至於怎麼排序結構體,像C++裏寫個cmp的方法,在java還不太清楚,希望有人指點下~~

例程:

[java] view plain copy
 print?
  1. import java.io.*;  
  2. import java.math.*;  
  3. import java.util.*;  
  4. import java.text.*;  
  5. public class Main  
  6. {  
  7.     public static void main(String[] args)   
  8.     {  
  9.         Scanner cin = new Scanner (new BufferedInputStream(System.in));  
  10.         int n = cin.nextInt();  
  11.         int a[] = new int [n];  
  12.         for (int i = 0; i < n; i++) a[i] = cin.nextInt();  
  13.         Arrays.sort(a);  
  14.         for (int i = 0; i < n; i++) System.out.print(a[i] + " ");  
  15.     }  
  16. }  


7. POJ高精度題目彙總:

POJ 1131 1205 1220 1405 1503 1604 1894 2084 2305 2325 2389 2413 3101 3199



轉自:http://hi.baidu.com/czyuan_acm/blog/item/d0bf7a439d90d21b72f05d69.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章