qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          Java in ACM/ICPC

           目錄
            Java在ACM/ICPC中的特點
            在ACM/ICPC中使用Java需要注意的問題
            Java與高精度計算
            1.Java在ACM/ICPC中的特點
            Java的語法和C++幾乎相同
            Java在執行計算密集任務的時候并不比C/C++慢多少,只是IO操作較慢而已
            Java 簡單而功能強大,有些東西用Java實現起來更為方便
            比如:輸入輸出、字符串解析、高精度
            Java不易犯細微的錯誤
            C/C++中的指針
            “if (n = m) ... ”
            Java與Eclipse
            2.在ACM/ICPC中使用Java需要注意的問題
            java程序結構
            Java I/O
            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.讀入數據
            2.判斷是否還有數據
            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/26
            String 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

          posted on 2014-10-15 09:53 順其自然EVO 閱讀(251) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

          <2014年10月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 武胜县| 昭苏县| 塘沽区| 英德市| 陕西省| 普定县| 于都县| 甘泉县| 新郑市| 千阳县| 延寿县| 长沙县| 枝江市| 富民县| 琼中| 南皮县| 康平县| 辽阳市| 武邑县| 应用必备| 乌拉特后旗| 磐安县| 吉水县| 凌源市| 江北区| 连平县| 新沂市| 南华县| 湖北省| 通州区| 新丰县| 福鼎市| 祥云县| 长海县| 绍兴市| 永川市| 大同市| 河间市| 龙游县| 奉贤区| 景德镇市|