目录:
1. 数组的应用–高精度
2. 队列
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();}
}