·工具」 Java总结 Version1.0

本文并不是在介绍Java,并不是零基础教学

本文是针对Acmer的Java总结而已。

准备好了吗,让我们开始吧

 -----BIGBALLON

2014-10-02 19:40:47

目录

0. 初心之 Java 必备基础篇

1. 万恶的 StreamTokenizer

2. 丧心病狂的 StringTokenize

3. 快速方便的BufferedReader

4. 萌萌的模板君

 

 

 

 

0. 初心之 Java必备基础篇

 

强烈推荐以下两篇文章

1. 脑残的孩子只有慢慢学。。

2. CodeBlog

3. 若需要了解其他更多相关用法,请自行查阅java api

 

其实你可以先看一个例子,然后我们一一讲解例子中用到的东西

import java.io.*;

import java.util.*;

import java.math.BigInteger;





public class Main{



    public static void main(String[] args) throws IOException{

        Scanner in = new Scanner(new BufferedInputStream(System.in));

        //Scanner流,用来进行读入



        //调试专用 

        //相当于freopen()

        /*

        FileInputStream fin = new FileInputStream("in.txt")    ;

        PrintStream fout = new PrintStream("out.txt");

        System.setIn(fin);

        System.setOut(fout);

        */

        System.out.println("this is d demo!");

        //相当于printf("this is d demo!\n");    有换行

        System.out.print("good job");

        //相当于printf("good job");                无换行

        System.out.println();

        System.out.printf("I love printf\n");

        //JDK5.0之后,可以使用printf, C语言使用者的福音啊



        int a = in.nextInt();                 //相当于scanf("%d",&a);

        double b = in.nextDouble();            //相当于scanf("%lf",&b);

        String s = in.next();                //相当于scanf("%s",s);

        String ss = in.nextLine();            //相当于gets(ss);

        BigInteger c = in.nextBigInteger();    //直接接收一个大数,Java大数类神器



        int t;

        while(in.hasNext()){                //用来判断EOF

            t = in.nextInt();

            System.out.println("t = " + t);

            //相当于printf("t = %d\n",t);    



            String str = String.valueOf(t);

            System.out.println("str = " + str);

        }



        BigInteger BIG = BigInteger.ONE;

        BigInteger BIGG = BigInteger.ZERO;

        BigInteger GG  = BigInteger.valueOf(111);

        BigInteger GGG = GG;



        GG = GG.add(GGG);

        GG = GG.subtract(GGG);

        GG = GG.multiply(GGG);

        GG = GG.divide(GGG);

        GG = GG.gcd(GG);



        int num = 100;

        String s1 = new String("whiteblock63");

        String s2 = String.valueOf(s1);

        String s3 = String.valueOf(num); 



        String ss1, ss2, ss3, ss4;

        int aa = 100;



        ss1 = Integer.toString(aa,2);             //把int型数据转换为2进制数并转换成string型

        int bb  = Integer.parseInt(ss1,10);       //把string字符转换为10进制的int型



        Double xx = 100.111;

        ss4 = Double.toString(xx);   //Double 转换为字符串,double没有进制这个说法





        BigInteger cc = BigInteger.valueOf(101);        //初始化一个大数c = 101

        ss2 = cc.toString(2);             //将大数转化为二进制的字符串

        ss3 = cc.toString(10);           //将大数转化为十进制的字符串 

        BigInteger aaa = new BigInteger(ss2,2);    



    }



}
我只是一个毫无用处的例子

 

 

 

a.  import 

   在Java中用的是 import 引入class类.

 

import java.util.*;    //输入输出需要用到

import java.math.*; //大数类在math里面

import java.io.*; //BufferedInpitStream需要用到

 

  

 

b.  输入输出篇

  Scanner是一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。它使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。

 

最常用的输入
Scanner in
= new Scanner( new
    BufferedInputStream(System.in) );
最常用的输出 System.out.pritnln(); System.out.print(); JDK
5.0 之后支持System.out.printf()
c语言使用者的福音,不用解释了。爽到爆
读入一个int
int a = in.nextInt();   读入一个double double b = in.nextDouble(); 读一行      String c = in.nextLine(); 读一个字符串 String d = in.next(); 读一个大数    BigInteger c = in.nextBigInteger(); 判断文件结尾   in.hasNext();

 

  

 

 

c.  文件操作 (调试专用)

  在C语言中可以使用freopen()来进行文件重定向,Java中我们使用文件输入流FileInputStream

 

 

FileInputStream fin = new FileInputStream("in.txt")    ;

PrintStream fout = new PrintStream("out.txt");

System.setIn(fin);

System.setOut(fout);

 

 

 

 

 

d.  String类的相关方法的调用

 

int num = 100;

String s = new String("whiteblock63");

String ss = String.valueOf(s);

String sss = String.valueOf(num); 

 

  

 

 

e. 进制转换   -- JAVA神器 

   适用于string转int int转string string转大数,大数转string

 

String s1, s2, s3, s4;

int a = 100;



s1 = Integer.toString(a,2)             //把int型数据转换为2进制数并转换成string型

int b  = Integer.parseInt(s,10);       //把string字符转换为10进制的int型



Double xx = 100.111;

s4 = Double.toString(xx);   //Double 转换为字符串,double没有进制这个说法





BigInteger c = BigInteger.valueOf(101);        //初始化一个大数c = 101

s2 = c.toString(2);             //将大数转化为二进制的字符串

s3 = c.toString(10);           //将大数转化为十进制的字符串 

BigInteger a = new BigInteger(s2,2);    



//BigInteger(String val,int radix);

//将指定基数的BigInteger的字符串表示形式转换为BigInteger

 

import java.io.*;

import java.math.BigInteger;

import java.util.*;



public class Main {

    static PrintWriter out = new PrintWriter(new BufferedWriter(

            new OutputStreamWriter(System.out)));



    public static void main(String[] args) throws IOException {

        Scan scan = new Scan();

        int t = scan.nextInt();

        for (int c = 1; c <= t; c++) {

            String s = scan.next();

            BigInteger a = new BigInteger(s,2);

            s = scan.next();

            BigInteger b = new BigInteger(s,2);

            out.println("Case #" + c + ": " + a.gcd(b).toString(2));

        }

        out.flush();

    }



    private static double max(double d, double e) {

        if (d - e > 0)

            return d;

        return e;

    }

}



class Scan {



    BufferedReader buffer;

    StringTokenizer tok;



    Scan() {

        buffer = new BufferedReader(new InputStreamReader(System.in));

    }



    boolean hasNext() {

        while (tok == null || !tok.hasMoreElements()) {

            try {

                tok = new StringTokenizer(buffer.readLine());

            } catch (Exception e) {

                return false;

            }

        }

        return true;

    }



    String next() {

        if (hasNext())

            return tok.nextToken();

        return null;

    }



    String nextLine() {

        String s = null;

        try {

            s = buffer.readLine();

        } catch (Exception e) {

            return null;

        }

        return s;

    }



    char nextChar() {

        try {

            return ((char) buffer.read());

        } catch (Exception e) {

        }

        return '\0';

    }



    int nextInt() {

        return Integer.parseInt(next());

    }



    long nextLong() {

        return Long.parseLong(next());

    }



    double nextDouble() {

        return Double.parseDouble(next());

    }

}
HDU 5050

 

    

  

f. 字符串 和 字符数组

    这里要明白一点,Java中的String类是不能随便进行修改的,但是可以转化为字符数组来使用

 

//ch = st.toCharArray();  字符串转换为字符数组.

//st=st.substring(2, 4);  从第2位copy到第4位(不包括第4位)



import java.io.*;

import java.util.*;

public class Main

{

    public static void main(String[] args) 

    {

        Scanner cin = new Scanner (new BufferedInputStream(System.in));

        String st = "abcdefg";

        System.out.println(st.charAt(0)); // st.charAt(i)就相当于st[i].

        char [] ch;

        ch = st.toCharArray(); // 字符串转换为字符数组.

        for (int i = 0; i < ch.length; i++){

            ch[i] += 1;//字符数组可以像C++   一样操作

        }

        System.out.println(ch); // 输入为“bcdefgh”.

        st = st.substring(1); // 则从第1位开始copy(开头为第0位).

        System.out.println(st);

        st=st.substring(2, 4);  //从第2位copy到第4位(不包括第4位)

        System.out.println(st);//输出“de”

    }

}

 

  

G. BigInteger类----神一样的存在 

    神一样的方法。。。都很有用(下面提供了BigInteger所有的方法)

 

 BigInteger abs() 

          返回其值是此 BigInteger 的绝对值的 BigInteger。 

 BigInteger add(BigInteger val) 

          返回其值为 (this + val) 的 BigInteger。 

 BigInteger and(BigInteger val) 

          返回其值为 (this & val) 的 BigInteger。 

 BigInteger andNot(BigInteger val) 

          返回其值为 (this & ~val) 的 BigInteger。 

 int bitCount() 

          返回此 BigInteger 的二进制补码表示形式中与符号不同的位的数量。 

 int bitLength() 

          返回此 BigInteger 的最小的二进制补码表示形式的位数,不包括 符号位。 

 BigInteger clearBit(int n) 

          返回其值与清除了指定位的此 BigInteger 等效的 BigInteger。 

 int compareTo(BigInteger val) 

          将此 BigInteger 与指定的 BigInteger 进行比较。 

 BigInteger divide(BigInteger val) 

          返回其值为 (this / val) 的 BigInteger。 

 BigInteger[] divideAndRemainder(BigInteger val) 

          返回包含 (this / val) 后跟 (this % val) 的两个 BigInteger 的数组。 

 double doubleValue() 

          将此 BigInteger 转换为 double。 

 boolean equals(Object x) 

          比较此 BigInteger 与指定的 Object 的相等性。 

 BigInteger flipBit(int n) 

          返回其值与对此 BigInteger 进行指定位翻转后的值等效的 BigInteger。 

 float floatValue() 

          将此 BigInteger 转换为 float 

 BigInteger gcd(BigInteger val) 

          返回一个 BigInteger,其值是 abs(this) 和 abs(val) 的最大公约数。 

 int getLowestSetBit() 

           返回此 BigInteger 最右端(最低位)1 比特的索引

 (即从此字节的右端开始到本字   节中最右端 1 比特之间的 0 比特的位数)。 

 int hashCode() 

          返回此 BigInteger 的哈希码。 

 int intValue() 

          将此 BigInteger 转换为 int。 

 boolean isProbablePrime(int certainty) 

          如果此 BigInteger 可能为素数,则返回 true,如果它一定为合数,则返回 false。 

 long longValue() 

          将此 BigInteger 转换为 long。 

 BigInteger max(BigInteger val) 

          返回此 BigInteger 和 val 的最大值。 

 BigInteger min(BigInteger val) 

          返回此 BigInteger 和 val 的最小值。 

 BigInteger mod(BigInteger m) 

          返回其值为 (this mod m) 的 BigInteger。 

 BigInteger modInverse(BigInteger m) 

          返回其值为 (this-1 mod m) 的 BigInteger。 

 BigInteger modPow(BigInteger exponent, BigInteger m) 

          返回其值为 (thisexponent mod m) 的 BigInteger。 

 BigInteger multiply(BigInteger val) 

          返回其值为 (this * val) 的 BigInteger。 

 BigInteger negate() 

          返回其值是 (-this) 的 BigInteger。 

 BigInteger nextProbablePrime() 

          返回大于此 BigInteger 的可能为素数的第一个整数。 

 BigInteger not() 

          返回其值为 (~this) 的 BigInteger。 

 BigInteger or(BigInteger val) 

          返回其值为 (this | val) 的 BigInteger。 

 BigInteger pow(int exponent) 

         返回其值为 (thisexponent) 的 BigInteger。 

 static BigInteger probablePrime(int bitLength, Random rnd) 

          返回有可能是素数的、具有指定长度的正 BigInteger。 

 BigInteger remainder(BigInteger val) 

         返回其值为 (this % val) 的 BigInteger。 

 BigInteger setBit(int n) 

         返回其值与设置了指定位的此 BigInteger 等效的 BigInteger。 

 BigInteger shiftLeft(int n) 

         返回其值为 (this << n) 的 BigInteger。 

 BigInteger shiftRight(int n) 

          返回其值为 (this >> n) 的 BigInteger。 

 int signum() 

          返回此 BigInteger 的正负号函数。 

 BigInteger subtract(BigInteger val) 

          返回其值为 (this - val) 的 BigInteger。 

 boolean testBit(int n) 

         当且仅当设置了指定的位时,返回 true。 

 byte[] toByteArray() 

         返回一个字节数组,该数组包含此 BigInteger 的二进制补码表示形式。 

 String toString() 

         返回此 BigInteger 的十进制字符串表示形式。 

 String toString(int radix) 

          返回此 BigInteger 的给定基数的字符串表示形式。 

 static BigInteger valueOf(long val) 

         返回其值等于指定 long 的值的 BigInteger。 

 BigInteger xor(BigInteger val) 

         返回其值为 (this ^ val) 的 BigInteger。 

 

  

 

 

 

1. 万恶的 StreamTokenizer 

 

 

// StreamTokenizer的用法



查阅API:



java.lang.Object

  继承者 java.io.StreamTokenizer



StreamTokenizer 类获取输入流并将其分析为"标记"(Token)

允许一次读取一个标记。

分析过程由一个表和许多可以设置为各种状态的标志控制。该流的标记生成器可以识别标识符、数字、引用的字符串和各种注释样式。 



另外,一个实例还有四个标记 (返回值是int型)

TT_EOF   指示已读到流末尾的常量 

TT_EOL   指示已读到行末尾的常量

TT_NUMBER 指示已读到的一个数字标记的常量

TT_WORD    指示已读到的一个文字标记的常量



然后还有几个字段

nval ( Double 型 ) 如果当前标记是一个数字,则此字段将包含该数字的值。 

sval  (String 型 ) 如果当前标记是一个文字标记,则此字段包含一个给出该文字标记的字符的字符串。



ttype (int型,对于那个前面的四个标记)

在调用 nextToken 方法之后,此字段将包含刚读取的标记的类型。

 

 

 

// 构造方法摘要



Reader r = new BufferedReader(new InputStreamReader(is));

StreamTokenizer st = new StreamTokenizer(r);





StreamTokenizer cin  = 

  new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));

 

import java.io.*;



public class StreamTokenizerDemo {



   public static void main(String[] args) {



      String text = "Hello. This is a text \n that will be split "

              + "into tokens. 1+1=2";

      try {

         // create a new file with an ObjectOutputStream

         FileOutputStream out = new FileOutputStream("test.txt");

         ObjectOutputStream oout = new ObjectOutputStream(out);



         // write something in the file

         oout.writeUTF(text);

         oout.flush();



         // create an ObjectInputStream for the file we created before

         ObjectInputStream ois =

                 new ObjectInputStream(new FileInputStream("test.txt"));



         // create a new tokenizer

         Reader r = new BufferedReader(new InputStreamReader(ois));

         StreamTokenizer st = new StreamTokenizer(r);



         // print the stream tokens

         boolean eof = false;

         do {



            int token = st.nextToken();

            switch (token) {

               case StreamTokenizer.TT_EOF:

                  System.out.println("End of File encountered.");

                  eof = true;

                  break;

               case StreamTokenizer.TT_EOL:

                  System.out.println("End of Line encountered.");

                  break;

               case StreamTokenizer.TT_WORD:

                  System.out.println("Word: " + st.sval);

                  break;

               case StreamTokenizer.TT_NUMBER:

                  System.out.println("Number: " + st.nval);

                  break;

               default:

                  System.out.println((char) token + " encountered.");

                  if (token == '!') {

                     eof = true;

                  }

            }

         } while (!eof);





      } catch (Exception ex) {

         ex.printStackTrace();

      }

   }

}
附带一个StreamTokenizer的测试Demo
import java.util.*;    //输入输出需要用到

import java.math.*; //大数类在math里面

import java.io.*;//BufferedInpitStream需要用到



public class Main{

    public static void main(String[] args) throws IOException{

        //cin.nextTokenizer可能会抛出异常 



        //调试用的文件输入输出

        /*FileInputStream fin = new FileInputStream("in.txt")    ;

        PrintStream fout = new PrintStream("out.txt");

        System.setIn(fin);

        System.setOut(fout);

        */

        int num = 100;

        String s = new String("whiteblock63");

        String ss = String.valueOf(s);

        String sss = String.valueOf(num);

        System.out.println(ss);

        System.out.println(sss);

        int bb  = Integer.parseInt(sss,10);

        System.out.println("bb = " + bb);

        BigInteger mm = BigInteger.valueOf(100);

        String mmm = mm.toString(2);

        System.out.println(mmm);

        Double xx = 100.1;

        String s1,s2, s3;

        BigInteger cc = BigInteger.valueOf(101);

        s2 = cc.toString(2);

        s3 = cc.toString(10);

        System.out.println(s2);

        System.out.println(s3);



        StreamTokenizer cin  = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));

        PrintWriter cout = new PrintWriter(new OutputStreamWriter(System.out));

        cin.nextToken();

        //cout.printf("t = %d\n",t);

        int type = cin.nextToken();

        int t = (int)cin.nval;

        cout.printf("type = %d\n",type);    

        for(int i=1;i<=t;i++){

            if(type == cin.TT_EOF)

                break;

            if(i != 1)

                cout.printf("\n");

            type = cin.nextToken();

            if( type == cin.TT_EOL)

                type = cin.nextToken();



            //cout.printf("type = %d\n",type);

            String tmp = cin.toString();

            BigInteger a = new BigInteger(tmp,2);

            type = cin.nextToken();

            if( type == cin.TT_EOL)

                type = cin.nextToken();



            //cout.printf("type = %d\n",type);

            tmp = cin.toString();

            BigInteger b = new BigInteger(tmp,2);

            cout.printf("Case %d:\n",i);

            cout.println(a + "+" + b +" = " + a.add(b));

        }

        /*

        for(int i=1;i<=t;i++){

            if( i != 1)    cout.printf("\n");

            type = cin.nextToken();

            if(type == StreamTokenizer.TT_NUMBER){

                String ss = Double.toString(cin.nval);

                a = new BigInteger(ss);

            }

            else {

                a = new BigInteger(cin.sval);

            }

            

            if(type == StreamTokenizer.TT_NUMBER){

                String sss = Double.toString(cin.nval);

                b = new BigInteger(sss);

            }

            else {

                b = new BigInteger(cin.sval);

            }

            cout.printf("Case %d:\n",i);

            cout.println(a + "+" + b +" = " + a.add(b));



        }

        */



        cout.flush();

        cout.close();

    }

}



/*

1. 普通的输入

Scanner cin = new Scanner(new BufferedInputStream(System.in))

cin.close();



2.如何读入

hasNext() 

next()

nextInt();

nextLine();

nextDouble();

nextBigInteger



3.输出

double d;

d=9999.99999;

System.out.format("%f",d);                //9999.999990     没有回车

System.out.format("%10.10f",d).println(); //9999.9999900000 输出回车

System.out.format("%.4f",d).println();    //10000.0000      输出回车

System.out.format("%3.4f",d).println();   //10000.0000        输出回车

System.out.println(d);                    //输出当前变量      输出回车

System.out.println();                     //                输出回车

System.out.printf("%f",d);                     //9999.999990     没有回车

System.out.print(d);                      //9999.99999      没有回车    



4.高精度

x.add(y);

x.subtract(y);

x.multiply(y);

x.divide(y);

x.mod(y);

x.gcd(y);



5.进制转换





*/
最后得出的结论是,,,Stream不好用。。我勒个去

 

 

 

 

2. 丧心病狂的 StringTokenizer   

 

 

  string tokenizer 类允许应用程序将字符串分解为标记。tokenization 方法比 StreamTokenizer 类所使用的方法更简单。StringTokenizer 方法不区分标识符、数和带引号的字符串,它们也不识别并跳过注释。

  可以在创建时指定,也可以根据每个标记来指定分隔符(分隔标记的字符)集合。

  StringTokenizer 的实例有两种行为方式,这取决于它在创建时使用的 returnDelims 标志的值是 true 还是 false

  • 如果标志为 false,则分隔符字符用来分隔标记。标记是连续字符(不是分隔符)的最大序列。
  • 如果标志为 true,则认为那些分隔符字符本身即为标记。因此标记要么是一个分隔符字符,要么是那些连续字符(不是分隔符)的最大序列。

  StringTokenizer 对象在内部维护字符串中要被标记的当前位置。某些操作将此当前位置移至已处理的字符后。

  通过截取字符串的一个子串来返回标记,该字符串用于创建 StringTokenizer 对象。 

  

a.   构造函数

 

StringTokenizer(String str) 

    为指定字符串构造一个 string tokenizer。 

StringTokenizer(String str, String delim) 



StringTokenizer(String str, String delim, boolean returnDelims) 
public StringTokenizer(String str)

为指定字符串构造一个 string tokenizer。tokenizer 

使用默认的分隔符集合 " \t\n\r\f",即:空白字符、制表符、换行符、回车符和换页符。分隔符字符本身不作为标记。 



参数:

str - 要分析的字符串。 

抛出: 

NullPointerException - 如果 str 为 nullpublic StringTokenizer(String str, String delim)

为指定字符串构造一个 string tokenizer。delim 参数中的字符都是分隔标记的分隔符。分隔符字符本身不作为标记。 

注意,如果 delim 为 null,则此构造方法不抛出异常。但是,尝试对得到的 StringTokenizer 调用其他方法则可能抛出 NullPointerException。 



参数:

str - 要分析的字符串。

delim - 分隔符。 

抛出: 

NullPointerException - 如果 str 为 null

 

  

 b. 方法摘要

 

 int countTokens() 

          计算在生成异常之前可以调用此 tokenizer 的 nextToken 方法的次数。 

 boolean hasMoreElements() 

          返回与 hasMoreTokens 方法相同的值。 

 boolean hasMoreTokens() 

          测试此 tokenizer 的字符串中是否还有更多的可用标记。 

 Object nextElement() 

          除了其声明返回值是 Object 而不是 String 之外,它返回与 nextToken 方法相同的值。 

 String nextToken() 

          返回此 string tokenizer 的下一个标记。 

 String nextToken(String delim) 

          返回此 string tokenizer 的字符串中的下一个标记。 

 

 

 

 

 

3.  快速方便的BufferedReader

 

   下面是金策工业综合大学5047的模板,BufferedReader支持read() 读取单个字符 readLine()读取一行,具体的可以在适当的时候使用,因为这里的输入是每一行给定一个数,那么完全可以直接读一行,让后直接转换为BigInteger就可以了,然后就,,就AC了,貌似是全场AC的JAVA代码里面最快的

 

import java.io.*;

import java.math.*;



public class Main{

  public static BufferedReader cin=new BufferedReader(new InputStreamReader(System.in));

  public static BufferedWriter cout=new BufferedWriter(new OutputStreamWriter(System.out));

  public static void main(String []args) throws Exception{

    int T=Integer.parseInt(cin.readLine());

    for(int nkase=1;nkase<=T;nkase++){

      cout.write("Case #"+nkase+": ");

      BigInteger N=new BigInteger(cin.readLine());

      BigInteger ans=N.multiply(N).multiply(BigInteger.valueOf(8)).subtract(
            N.multiply(BigInteger.valueOf(7))).add(BigInteger.valueOf(1)); cout.write(ans.toString()); cout.newLine(); } cout.flush(); cout.close(); } }

 

 

 

a.  构造函数

 

BufferedReader(Reader in) 

          创建一个使用默认大小输入缓冲区的缓冲字符输入流。 

BufferedReader(Reader in, int sz) 

          创建一个使用指定大小输入缓冲区的缓冲字符输入流。 

 

  

b.  方法摘要

 

 void close() 

          关闭该流。 

 void mark(int readAheadLimit) 

          标记流中的当前位置。 

 boolean markSupported() 

          判断此流是否支持 mark() 操作(它一定支持)。 

 int read() 

          读取单个字符。 

 int read(char[] cbuf, int off, int len) 

          将字符读入数组的某一部分。 

 String readLine() 

          读取一个文本行。 

 boolean ready() 

          判断此流是否已准备好被读取。 

 void reset() 

          将流重置为最新的标记。 

 long skip(long n) 

          跳过字符。 

 

  

 

  

 

4.  萌萌的模板君

 

  比赛的时候可以使用这个模板,相当给力的说

 

import java.io.*;

import java.math.BigInteger;

import java.util.*;



public class Main {

    static PrintWriter out = new PrintWriter(new BufferedWriter(

            new OutputStreamWriter(System.out)));



    public static void main(String[] args) throws IOException {

        Scan scan = new Scan();

        int t = scan.nextInt();

        for (int c = 1; c <= t; c++) {

            String s = scan.next();

            BigInteger a = new BigInteger(s,2);

            s = scan.next();

            BigInteger b = new BigInteger(s,2);

            out.println("Case #" + c + ": " + a.gcd(b).toString(2));

        }

        out.flush();

    }

}



class Scan {



    BufferedReader buffer;

    StringTokenizer tok;



    Scan() {

        buffer = new BufferedReader(new InputStreamReader(System.in));

    }



    boolean hasNext() {

        while (tok == null || !tok.hasMoreElements()) {

            try {

                tok = new StringTokenizer(buffer.readLine());

            } catch (Exception e) {

                return false;

            }

        }

        return true;

    }



    String next() {

        if (hasNext())

            return tok.nextToken();

        return null;

    }



    String nextLine() {

        String s = null;

        try {

            s = buffer.readLine();

        } catch (Exception e) {

            return null;

        }

        return s;

    }



    char nextChar() {

        try {

            return ((char) buffer.read());

        } catch (Exception e) {

        }

        return '\0';

    }



    int nextInt() {

        return Integer.parseInt(next());

    }



    long nextLong() {

        return Long.parseLong(next());

    }



    double nextDouble() {

        return Double.parseDouble(next());

    }

}
模板君,从某神牛那里学来的,忘记是谁了,版权归神牛所有 
import java.io.*;

import java.util.*;

import java.math.*;



public class Main{

    

    static PrintWriter out = new PrintWriter(new BufferedWriter(

        new OutputStreamWriter(System.out)));

    public static void main(String [] args) throws IOException{

        Scan scan = new Scan();

        

        BigInteger [] co = new BigInteger[21];

        co[0] = BigInteger.ZERO;

        co[1] = BigInteger.ZERO;

        co[2] = BigInteger.ONE;

        co[3] = BigInteger.valueOf(2);

        int i, j;

        for(i=4;i<=20;i++){

            co[i] = (co[i-1].add(co[i-2])).multiply(BigInteger.valueOf(i-1));

            //out.println(co[i]);

        }

        BigInteger [] fa = new BigInteger[21];

        fa[0] = BigInteger.ONE;

        fa[1] = BigInteger.ONE;

        for(i =2;i<=20;i++){

            fa[i] = fa[i-1].multiply(BigInteger.valueOf(i));

            //out.println(fa[i]);

        }



        int t = scan.nextInt();

        for(j=0;j<t;j++){

            int n = scan.nextInt();

            int m = scan.nextInt();

            BigInteger ans

             = fa[n].divide(fa[n-m].multiply(fa[m])).multiply(co[m]);

            out.println(ans);



        }

        out.flush();

        out.close();

    }

}





class Scan{



    BufferedReader buffer;

    StringTokenizer tok;



    Scan(){

        buffer = new BufferedReader(new InputStreamReader(System.in));

    }



    boolean hasNext(){

        while(tok == null || !tok.hasMoreElements()){

            try{

                tok = new StringTokenizer(buffer.readLine());

            }catch(Exception e){

                return false;

            }

        }

        return true;

    }



    String next(){

        if(hasNext()){

            return tok.nextToken();

        }

        return null;

    }



    String nextLine(){

        String s = null;

        try{

            s = buffer.readLine();

        }catch (Exception e) {

            return null;

        }

        return s;

    }



    char nextChar(){

        try{

            return ((char)buffer.read());

        }catch (Exception e) {



        }

        return '\0';

    }



    int nextInt(){

        return Integer.parseInt(next());

    }



    long nextLone(){

        return Long.parseLong(next());

    }



    double nextDouble(){

        return Double.parseDouble(next());

    }

}
测试1--hdu2049
import java.io.*;

import java.util.*;

import java.math.*;



public class Main{

    

    static PrintWriter out = new PrintWriter(new BufferedWriter(

        new OutputStreamWriter(System.out)));

    public static void main(String [] args) throws IOException{

        Scan scan = new Scan();

        BigInteger [] catalan = new BigInteger[110];

        catalan[0] = BigInteger.ONE;

        catalan[1] = BigInteger.ONE;

        int i,t;

        for(i=2;i<=100;i++){

            t = 4*i-2;

            BigInteger a = BigInteger.valueOf(t);

            t = i+1;

            BigInteger b = BigInteger.valueOf(t);

            catalan[i] = catalan[i-1].multiply(a).divide(b);

        }

        while(scan.hasNext()){

            t = scan.nextInt();

            if(t == -1)

                break;

            out.println(catalan[t]);

        }

        out.flush();

        out.close();

    }

}





class Scan{



    BufferedReader buffer;

    StringTokenizer tok;



    Scan(){

        buffer = new BufferedReader(new InputStreamReader(System.in));

    }



    boolean hasNext(){

        while(tok == null || !tok.hasMoreElements()){

            try{

                tok = new StringTokenizer(buffer.readLine());

            }catch(Exception e){

                return false;

            }

        }

        return true;

    }



    String next(){

        if(hasNext()){

            return tok.nextToken();

        }

        return null;

    }



    String nextLine(){

        String s = null;

        try{

            s = buffer.readLine();

        }catch (Exception e) {

            return null;

        }

        return s;

    }



    char nextChar(){

        try{

            return ((char)buffer.read());

        }catch (Exception e) {



        }

        return '\0';

    }



    int nextInt(){

        return Integer.parseInt(next());

    }



    long nextLone(){

        return Long.parseLong(next());

    }



    double nextDouble(){

        return Double.parseDouble(next());

    }

}
测试2--hdu1134

 

  当然,不要忘记一个外挂一样的存在,输入输出挂

void scan( int &x )

{

    char c;

    while( c = getchar(), c < '0' || c > '9' );

    x = c - '0';

    while( c = getchar(), c >= '0' && c <= '9' ) x = x*10 + c - '0';

}



void out( int x )

{

    if( x > 9 ) out( x/10 );

    putchar( x%10 + '0' );

}
输入输出挂

 

你可能感兴趣的:(version)