目录:
1. 数组的应用–高精度
高精度算法就是大数的计算方法。超过64位的大数计算,Java和Python都能直接算。竞赛中常常用到很大的数组。强烈建议不要用动态分配,因为动态分配需要多写代码而且容易出错。定义为全局静态数组即可,而且不需要初始化为0,因为全局变量在编译时会自动初始化为全0。注意全局变量和局部变量的初值。全局变量如果没有赋值,在编译时被自动初始化为0。在函数内部定义的局部变量,若需要初值为0,一定要初始化为0,否则可能为莫名其妙的值。
Java计算大数,理论上可以计算“无限大”的数,只要不超内存。
【1】大数计算:输入两行表示两个整数。分别计算加、减、乘、除,分5行输出和、差、积、商、余数。
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
BigInteger a,b;
a=sc.nextBigInteger();
b=sc.nextBigInteger();
System.out.println(a.add(b));
System.out.println(a.subtract(b));
System.out.println(a.multiply(b));
System.out.println(a.divide(b));
System.out.println(a.mod(b)); //如果b是负数,这里可能报错
}
}
2. 队列
队列中的数据存取方式是“先进先出”,只能往队尾插入数据、从队头移出数据。 Java用LinkedList实现基本队列Queue。常用操作有:
【2】机器翻译
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int capacity =scan.nextInt();
int length = scan.nextInt();
Queue<Integer> q = new LinkedList<>();
int danci = 0;
int chaxun = 0;
for(int i =0;i<length;i++){
danci = scan.nextInt();
if(!q.contains(danci)){
if(q.size()>=capacity){
q.poll();
}
q.offer(danci);
chaxun++;
}
}
System.out.println(chaxun);
scan.close();
}
}
【3】餐厅排队
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int cishu = scan.nextInt();
Deque<Integer> duiwu = new LinkedList<>();
for(int i = 0;i<cishu;i++){
int caozuo = scan.nextInt();
if(caozuo==1){
int bianhao = scan.nextInt();
duiwu.offer(bianhao);
}else if(caozuo==2){
duiwu.poll();
}else{
System.out.print(duiwu.peek() + " ");
System.out.println(duiwu.getLast());
}
}
scan.close();
}
}
【4】小桥的神秘礼物盒
import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
int cishu = scan.nextInt();
Deque<Integer> duilie = new LinkedList<>();
for(int i = 0;i<cishu;i++){
int shuzi = scan.nextInt();
if(shuzi == 1){
int bianhao = scan.nextInt();
duilie.offer(bianhao);
}else if(shuzi == 2){
if(duilie.size() == 0){
System.out.println("lan");
}else{
duilie.poll();
}
}else if(shuzi == 3){
if(duilie.size() == 0){
System.out.println("qiao");
}else{
System.out.println(duilie.peek());
}
}else if(shuzi == 4){
System.out.println(duilie.size());
}
}
scan.close();
}
}