【蓝桥杯】基础知识积累1

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. 加减乘除
  1. add
  2. subtract
  3. multiply
  4. divide
5. 基本Math中有的方法 这里也有
  1. pow // 指数
  2. gcd // 最大公约数
  3. mod // 取余
  4. max // 最大值
  5. 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

常用String方法集合

StringBuilder

  1. StringBuilder是可变字符串类,而String是不可变字符串类。
  2. 使用StringBuilder进行字符串操作时,每次操作都会在原有字符串上进行修改,不会产生新的对象,因此更高效
  3. 而使用String进行字符串操作时,每次操作都会产生新的对象,因此更加耗费内存。
  4. 总之,当需要频繁修改字符串时,应该使用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 / 60n / 60 % 60
已知分数 (m)n / 60n % 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);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值