###输入
import java.io.*;
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(new BufferedInputStream(System.in));
//Scanner cin = new Scanner(System.in); 稍微慢一些
//int t = cin.nextInt();
//while(t -- > 0) {
while(cin.hasNext()) {
int n = cin.nextInt();
String s = cin.next(); //读取到空格
double t = cin.nextDouble();
String s = cin.nextLine(); //读取整行
BigInteger a = cin.nextBigInteger();
BigDecimal b = cin.nextBigDecimal(); //高精度浮点数
//数组定义和初始化
int[] Array = new int[MAX_N]; //动态初始化
int intArray[] = {1,2,3,4}; //静态初始化
//遍历数组
for(int i = 0; i < n; i ++) {
Array[i] = cin.nextInt();
}
for(int x:intArray) { //会遍历所有初始化的空间
total += x;
}
}
}
}
###输出
System.out.print() 和 System.out.println(),前者不输出换行
System.out.println(n); // n 为 int 型 同一行输出多个整数可以用
System.out.println(new Integer(n).toString() + " " + new Integer(m).toString());
//高精度小数输出保留k位小数
System.out.println(x.setScale(k, BigDecimal.ROUND_DOWN).toPlainString()); //注意小数toString为科学记数法输出
//小数输出需要去除后导零的情况
String ans = b.stripTrailingZeros().toPlainString();
if(ans.startsWith("0")) ans = ans.substring(1);
System.out.println(ans);
//对于输出浮点数保留几位小数的问题,可以使用DecimalFormat类,
import java.text.*;
DecimalFormat g = new DecimalFormat("0.000");
double a = 123.45678, b = 0.12;
System.out.println(g.format(b));
###高精度
BigInteger a = BigInteger.valueOf(100);
BigInteger b = BigInteger.valueOf(50);
BigInteger A = BigInteger.ONE;
BigInteger B = BigInteger.TEN;
BigInteger C = BigInteger ZERO;
BigInteger add(BigInteger other)
BigInteger subtract(BigInteger other)
BigInteger multiply(BigInteger other)
BigInteger divide(BigInteger other)
BigInteger mod(BigInteger other) c = a.mod(b) 范围0~b-1
BigInteger reminder(BigInteger other) c = a.reminder(b) 范围 -b+1 ~ b-1
int compareTo(BigInteger other) c = a.compareTo(b); -1,0,1表示小于、等于和大于
equals:判断两数是否相等,也可以用compareTo来代替;返回值为Boolean
static BigInteger valueOf(long x)
pow:c = a.pow(b)=a^b
gcd,abs:公约数,绝对值 c = a.gcd(b);
negate:取负数 c = a.negate();
min,max:取两个数的较小、大者; c = a.max(b);
intValue,longValue,floatValue,doublue:把该数转换为该类型的数的值。c = a.intValue();
public boolean isProbablePrime(int certainty) Boolean c = a.isProbablePrime(3); true表示该大数有(1 - 1/2certainty)的可能为素数,FALSE表示一定不为素数
###字符串
转化为char数组
String g = "line";
char c = g.charAt(0); // returns 'l'
char[] c_arr = g.toCharArray(); // returns a length 4 char array ['l','i','n','e']
数值与字符串的转换
int v = 123;
String s = "123";
int x = Integer.praseInt(s);
String s1 = String.valueOf(v); //or
String s2 = Integer.toString(v);
BigInteger a =new BigInteger(s);
BigInteger a = new BigInteger("2");
substring
System.out.println(a.substring(0, 4)) // output "Hell"
字符串连接可以直接用 + 号,如
String a = "Hello";
String b = "world";
System.out.println(a + ", " + b + "!"); // output "Hello, world!"
contains()
String str = "weixueyuan";
System.out.println(str.contains("yuan"));
true
replace
String str1 = "The url of weixueyuan is www.weixueyuan.net!";
String str2 = str1.replace("weixueyuan", "微学苑");
System.out.println(str1);
System.out.println(str2);
The url of weixueyuan is www.weixueyuan.net!
The url of 微学苑 is www.微学苑.net!
replace() 方法不会改变原来的字符串,而是生成一个新的字符串。
split
以指定字符串作为分隔符,对当前字符串进行分割,分割的结果是一个数组
String str = "wei_xue_yuan_is_good";
String strArr[] = str.split("_");
System.out.println(Arrays.toString(strArr));
[wei, xue, yuan, is, good]
###数组
int intArr[] = {30,20,5,12,55};
Arrays.sort(intArr);
int searchVal = 12;
int retVal = Arrays.binarySearch(intArr,searchVal); //返回所找到的下标
Arrays.fill(arr, 18);
###调用递归(或其他动态方法)
public class Main {
void dfs(int a)
{
if () return;
dfs(a+1);
}
public static void main(String args[])
{
Main e = new Main();
e.dfs(0);
}
}
##牛顿迭代
public void solve(int testNumber, InputReader in, PrintWriter out) {
//求x=sqrt(n),小数点后保留k位
BigDecimal n = in.nextBigDecimal();
int k = in.nextInt();
BigDecimal x = BigDecimal.valueOf(Math.sqrt(n.doubleValue()));
//Newton's method: x(n+1)=x(n)-f(x(n))/f'(x(n))
for (int i=0; i<10; ++i) {
x = x.add(n.divide(x, k+5, RoundingMode.HALF_UP));
x = x.divide(BigDecimal.valueOf(2), k+5, RoundingMode.HALF_UP);
}
x = x.setScale(k, BigDecimal.ROUND_DOWN);
out.println(x);
}
其他注意的事项:
(1) Java 是面向对象的语言,思考方法需要变换一下,里面的函数统称为方法,不要搞错。
(2) Java 里的数组有些变动,多维数组的内部其实都是指针,所以Java不支持fill多维数组。
数组定义后必须初始化,如 int[] a = new int[100];
(3) 布尔类型为 boolean,只有true和false二值,在 if (…) / while (…) 等语句的条件中必须为boolean类型。
在C/C++中的 if (n % 2) … 在Java中无法编译通过。