這里指的java速成,只限于java語法,包括輸入輸出,運算處理,字符串和高精度的處理,進制之間的轉換等,能解決OJ上的一些高精度題目。
1. 輸入:
格式為:Scanner cin = new Scanner
(new
BufferedInputStream(System.in));
例程:
import java.io.*;
import
java.math.*;
import
java.util.*;
import java.text.*;
public class Main
{
public
static void main(String[] args)
{
Scanner cin = new Scanner
(new
BufferedInputStream(System.in));
int a; double b; BigInteger
c;
String st;
a = cin.nextInt(); b = cin.nextDouble(); c
=
cin.nextBigInteger(); d = cin.nextLine(); //
每種類型都有相應的輸入函數.
}
}
2. 輸出
函數:System.out.print();
System.out.println();
System.out.printf();
System.out.print(); // cout
<<
…;
System.out.println(); // cout << …
<<
endl;
System.out.printf(); // 與C中的printf用法類似.
例程:
import java.io.*;
import
java.math.*;
import
java.util.*;
import java.text.*;
public class Main
{
public
static void main(String[] args)
{
Scanner cin = new Scanner
(new
BufferedInputStream(System.in));
int a; double b;
a
=
12345; b = 1.234567;
System.out.println(a + ” ” +
b);
System.out.printf(“%d %10.5f\n”, a, b); //
輸入b為字寬為10,右對齊,保留小數點后5位,四舍五入.
}
}
規格化的輸出:
函數:
//
這里0指一位數字,#指除0以外的數字(如果是0,則不顯示),四舍五入.
DecimalFormat fd = new
DecimalFormat(“#.00#”);
DecimalFormat gd =
new
DecimalFormat(“0.000″);
System.out.println(“x =” +
fd.format(x));
System.out.println(“x =” +
gd.format(x));
3.
字符串處理
java中字符串String是不可以修改的,要修改只能轉換為字符數組.
例程:
import java.io.*;
import
java.math.*;
import
java.util.*;
import java.text.*;
public class Main
{
public
static void main(String[] args)
{
int i;
Scanner
cin = new Scanner (new
BufferedInputStream(System.in));
String st =
“abcdefg”;
System.out.println(st.charAt(0)); //
st.charAt(i)就相當于st.
char []
ch;
ch = st.toCharArray(); //
字符串轉換為字符數組.
for (i = 0; i
< ch.length; i++) ch += 1;
System.out.println(ch); //
輸入為“bcdefgh”.
if (st.startsWith(“a”)) //
如果字符串以’0′開頭.
{
st = st.substring(1); //
則從第1位開始copy(開頭為第0位).
}
}
}
4.
高精度
BigInteger和BigDecimal可以說是acmer選擇java的首要原因。
函數:add,
subtract,
divide,
mod,
compareTo等,其中加減乘除模都要求是BigInteger(BigDecimal)和BigInteger(BigDecimal)之間的運算,所以需要把int(double)類型轉換為BigInteger(BigDecimal),用函數BigInteger.valueOf().
例程:
import java.io.*;
import
java.math.*;
import
java.util.*;
import java.text.*;
public class Main
{
public
static void main(String[] args)
{
Scanner cin = new Scanner
(new
BufferedInputStream(System.in));
int a = 123, b = 456, c
=
7890;
BigInteger x, y, z, ans;
x =
BigInteger.valueOf(a);
y = BigInteger.valueOf(b); z =
BigInteger.valueOf(c);
ans =
x.add(y);
System.out.println(ans);
ans =
z.divide(y);
System.out.println(ans);
ans =
x.mod(z);
System.out.println(ans);
if (ans.compareTo(x) ==
0)
System.out.println(“1″);
}
}
5.
進制轉換
java很強大的一個功能。
函數:
String st = Integer.toString(num,
base); //
把num當做10進制的數轉成base進制的st(base <= 35).
int num =
Integer.parseInt(st, base);
//
把st當做base進制,轉成10進制的int(parseInt有兩個參數,第一個為要轉的字符串,第二個為說明是什么進制).
BigInter
m = new BigInteger(st, base); //
st是字符串,base是st的進制.
6.
排序
函數:Arrays.sort();至于怎么排序結構體,像C++里寫個cmp的方法,在java還不太清楚,希望有人指點下~~
例程:
import java.io.*;
import
java.math.*;
import
java.util.*;
import java.text.*;
public class Main
{
public
static void main(String[] args)
{
Scanner cin = new Scanner
(new
BufferedInputStream(System.in));
int n =
cin.nextInt();
int a[] = new int [n];
for (int i = 0; i
< n; i++) a =
cin.nextInt();
Arrays.sort(a);
for (int i
= 0; i <
n; i++) System.out.print(a + ” “);
}
}
7. POJ高精度題目匯總:
POJ 1131 1205 1220
1405 1503 1604 1894 2084 2305
2325 2389 2413 3101
3199