文章目录
- 真题中出现的基础知识
- 菜鸡做一个积累
- 基础知识积累2
BigInteger
1. 将括号内的参数转换成指定的数据类型
BigInteger.ValueOf(i)
2. 转化为其它类型
public void testToAnother() {
BigInteger bigNum = new BigInteger("38");
//1.转换为bigNum的十进制字符串形式
String num2 = bigNum.toString(); //38
//2.将bigNum转换为int
int num4 = bigNum.intValue();
}
3. 构造方法
- 默认十进制转换
BigInteger d=new BigInteger("48");
System.out.println(d);
//答案输出:48,这里默认的是十进制,但也支持自定义转换类型
4. 加减乘除
- add
- subtract
- multiply
- divide
5. 基本Math中有的方法 这里也有
- pow // 指数
- gcd // 最大公约数
- mod // 取余
- max // 最大值
- compareTo equals // 比较
例 : 是否为3的倍数
int cnt = 0;
BigInteger three = new BigInteger("3");
for(int i=1;i<=100;i++) {
if(a[i].mod(three).equals(a[0])){
cnt++;
}
}
6. 内部常量
public void test() {
//0
BigInteger zero = BigInteger.ZERO;
//1
BigInteger one = BigInteger.ONE;
//10
BigInteger ten = BigInteger.TEN;
//需要别的常量可以直接使用构造方法
BigInteger three = new BigInteger("3");
}
7. equals 和 compareTo
StringBuilder
-
String和StringBuilder的区别
- StringBuilder是可变字符串类,而String是不可变字符串类。
- 使用StringBuilder进行字符串操作时,每次操作都会在原有字符串上进行修改,不会产生新的对象,因此更高效。
- 而使用String进行字符串操作时,每次操作都会产生新的对象,因此更加耗费内存。
- 总之,当需要频繁修改字符串时,应该使用StringBuilder;而在需要频繁读取字符串时,应该使用String.
1. 创建
- 常规创建
StringBuilder builder = new StringBuilder();
- 在创建的时候添加初始字符串
StringBuilder builder = new StringBuilder("abc");
- 数据的种类
2. 使用过的方法
- builder.toString()
作用:将对象中的数据以字符串的形式返回
builder.toString();
- builder.reverse()
作用:将对象中的数据反转
builder.reverse();
3. 例
- 判断回文
public static boolean isPalindrome(int num) {
String snumString = "" + num;
StringBuilder stringBuilder = new StringBuilder(snumString);
return stringBuilder.reverse().toString().equals(snumString);
}
关于中间
- 取一串数字的中间(长度)
int mid = (len%2) == 0 ? len/2 : (len/2)+1
数组定义
1. 三种定义方式
int[] arr = {1,2,3};
int[] arr1 = new int[] {1,2,3};
int[] arr2 = new int[3];
数组越栈
- 防止数组溢出 +1和-1
int a[] = new int[n]
for(int i = 0; i < n-1; i++){
// 1. 数组+1长度-1
a[i+1] > a[i]
// 2.
a[i+1] - a[i]
}
int a[] = new int[n]
for(int i = 1; i < n; i++){
// 1. 数组-1长度+1
a[i-1] > a[i]
// 2.
a[i] - a[i-1]
}
String输入值
1. next()
它会自动地消除有效字符之前的空格,只返回输入的字符,不会得到带空格的字符串。
2. nextLine() 【一般用这个】
它返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。
取数
1. 整数
- while循环 取最后一个数进行判断
private static boolean check(int x) {
// TODO Auto-generated method stub
while(x!=0) {
int a = x%10;
if(a==9) {
return true;
}
x/=10;
}
return false;
}
2. 数组
- 2021年蓝桥杯JAVA B组省赛
for(int i=0;i<10;i++) {
a[i] = 2021;
}
private static boolean del(int x) {
// TODO Auto-generated method stub
while(x!=0) {
a[x%10]--;
if(a[x%10]<0) {
return false;
}
x/=10;
}
return true;
}
时分秒的写法
- 2021年蓝桥杯JAVA B组省赛
//1秒=1000毫秒
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
n/=1000; // 转化成秒
n%=24*60*60; // 取余
System.out.printf("%02d:",n/60/60);
System.out.printf("%02d:",n/60%60);
System.out.printf("%02d",n%60);
}
- 只限于使用 int 时
%d :正常输出十进制数 。
%Yd:十进制数,输出 Y 位。如果本身大于 Y 位,正常输出。
%XYd:十进制数,输出 Y 位,不足 Y位就补 X 。如果本身大于 Y 位,正常输出。
以 %d,%2d, %02d 为例,
%d:十进制数正常输出 。
%2d:十进制数,输出 2 位。如果本身大于 2 位,正常输出。
%02d:十进制数,输出 2 位,不足 2 位就补 0 。如果本身大于 2 位,正常输出。
时分秒的转换
求小时 | 求分钟 | |
---|---|---|
已知秒数 (n) | n / 60 / 60 | n / 60 % 60 |
已知分数 (m) | n / 60 | n % 60 |
保留小数
1. 类型转换
- 由高转低
double的范围比int数据类型大,所以当int值被赋给double时,java会自动将int值转换为double。
int i = 10;
double j = i;
- 由低转高 利用valueOf方法
int i = 10;
double j = Double.valueOf(i);
2. 三种方法
-
printf()
-
使用字符串格式化实现四舍五入(支持float和double类型)
double data = 3.02;
//利用字符串格式化的方式实现四舍五入,保留1位小数
String result = String.format("%.1f",data);
//1代表小数点后面的位数, 不足补0。f代表数据是浮点类型。保留2位小数就是“%.2f”,依此累推。
System.out.println(result);//输出3.0
- 使用BigDecimal实现四舍五入(支持float和double类型)
double data = 3.02;
//利用BigDecimal来实现四舍五入.保留一位小数
double result = new BigDecimal(data).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
//1代表保留1位小数,保留两位小数就是2,依此累推
//BigDecimal.ROUND_HALF_UP 代表使用四舍五入的方式
System.out.println(result);//输出3.0
星期问题
- 2022年JAVA B组省赛
已知今天是星期六,请问 2022 ^{22} 天后是星期几?
注意用数字 1 到 7 表示星期一到星期日
public class B1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
BigInteger bigInteger = BigInteger.valueOf(20).pow(22).mod(BigInteger.valueOf(7));
// 今天是星期六 + 过去的天数
int result = (6 + bigInteger.intValue()) % 7;
System.out.println(result == 0 ? 7 : result);
}
}
给定一天是一周中的哪天,请问 n 天后是一周中的哪天?
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int weekday=sc.nextInt();//当前是周几
int after=sc.nextInt(); //过了多少天
// 今天是星期几 + 过去的天数
int result=(weekday+after)%7==0?7:(weekday+after)%7;
System.out.println(result);
}