蓝桥杯复习2

大数类

前言

基本数据类型的可存储长度的局限——数据溢出,为解决这而生。
被前辈们放置在包 java.math.*
大数类已经不考虑长度的问题,故而缩少了类似于 int 或 double 系列的变体(long,short,float)等。只有 整数大数 和 浮点大数 二种。
且基本运算不能类混合,即 整数大数 和 浮点大数 不能混合运算。
其基本运算介于是接口或类的实现,使用其API进行。

BigInteger 和 BigDecimal

  1. 创建 与 赋值
BigInteger a;
a = BigInteger.valueOf(123456789101112L); //大于int范围的要加L
//或
BigInteger a = new BigInteger("123456789101112131415");

  1. 加减乘除 与 取余
BigInteger a.add(BigInteger b);
BigDecimal a.add(BigDecimal b);

BigInteger a.subtract(BigInteger b);
BigDecimal a.sbutract(BigDecimal b);

BigInteger a.multiply(BigInteger b);
BigDecimal a.multiply(BigDecimal b);

BigInteger a.divide(BigInteger b);
BigDecimal a.divide(BigDecimal b);

BigInteger a.mod(BigInteger b);
  1. 求 最大公因数
BigInteger a.gcd(BigInteger b);
  1. 最值 与 (A^B)%MOD
BigInteger a.max(BigInteger b); 
BigInteger a.min(BigInteger b);
//浮点大数可类比
BigInteger q .modPow(BigInteger b , BigInteger c);
  1. 比较大小 与 进制转化 与 类型转化
BigInteger a.compareTo(BigInteger b);
BigDecimal a.compareTo(BigDecimal b);
//其返回值非true或false而是1,-1,0
//使用构造函数BigInteger(String, int index);可以把一个index进制的字符串,转化为10进制的BigInteger;
//引用他人
BigInteger a = new BigInteger("111110", 2);111110变为10进制赋值给a
System.out.println(a.toString(16));把a转化为16进制的字符串输出
BigInteger a.toBigDecimal() //把BigInteger 转化为 BigDecimal
BigDecimal a.toBigInteger() //把BigDecimal 转化为 BigInteger
  1. BigDecimal的精度问题
    ROUND_DOWN 向零舍入。 即1.55 变为 1.5 , -1.55 变为-1.5
    ROUND_CEILING 向正无穷舍入. 即 1.55 变为 1.6 , -1.55 变为 -1.5
    ROUND_FLOOR 向负无穷舍入. 即 1.55 变为 1.5 , -1.55 变为 -1.6
    ROUND_HALF_UP 四舍五入 即1.55 变为1.6, -1.55变为-1.6
    ROUND_HALF_DOWN 五舍六入 即 1.55 变为 1.5, -1.5变为-1.5
    ROUND_HALF_EVEN 如果舍入前一位的数字为偶数,则采用HALF_DOWN奇数则采用HALF_UP 如1.55 采用HALF_UP 1.45采用HALF_DOWN
    ROUND_UP 向远离0的方向舍入 即 1.55 变为 1.6 , -1.55 变为-1.6
    ROUND_UNNECESSARY 有精确的位数时,不需要舍入

  2. 保留n位小数

import java.math.*;
import java.util.*;
import java.io.*;
public class Main{
    public static void main(String[] args){ 
    	BigDecimal a = new BigDecimal("1.10218");
    	a = a.setScale(4,BigDecimal.ROUND_HALF_UP);//四舍五入保留四位小数
    	System.out.println(a);
    }
}

Math类

最值,平方根,绝对值

  1. 最值
public class Main{
	public static void main(String[] args){
		int a = 10;
		int b = 20;
		System.out.println(Math.min(a, b));
		System.out.println(Math.max(a, b));
	}
}
/*————————————————
版权声明:本文为CSDN博主「Androids_lost_Sheep」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/GD_ONE/article/details/104032835*/
  1. 平方根
Math.sqrt(double a)
//返回正确舍入的 double 值的正平方根。
  1. 绝对值
public class Main{
	public static void main(String[] args){
		int a = -10;
		System.out.println(Math.abs(a));
	}
}

求幂,取整

  1. 求幂
Math.pow(double a, double b)
//注意无论是传入int还是long都会返回一个double类型的数。
  1. 取整
    ①Math.ceil(double x):向上(右侧靠近)取整,返回大于该值的最近 double 值
System.out.println(Math.ceil(1.4)); // 2.0
System.out.println(Math.ceil(-1.6)); // -1.0

②Math.floor(double x):向下(左侧靠近)取整,返回小于该值的最近 double 值

System.out.println(Math.floor(1.6)); // 1.0
System.out.println(Math.floor(-1.6)); // -2.0

③Math.round(double x):算术四舍五入取整

随机数获取

  1. Math.random():生成一个[0,1)之间的double类型的伪随机数
  2. 所以为了得到一个[1, b] 之间的整数可以这样做:
int a = (int)(Math.random()*b + 1); 
// [1, b]
  1. 如果要得到[a, b]的一个整数则是:
int a = (int)(Math.random()*(b - a + 1) + a)  
// + 1 是因为random()最大取不到1,所以上限取整后就会少1.   

三角函数

    Math.cos(double a) 		余弦
    Math.acos(double a) 	反余弦
    Math.sin(double a) 		正弦值
    Math.asin(double a) 	反正弦值
    Math.tan(double a)		正切值
    Math.atan(double a)		反正切

String 、StringBuilder、StringBuffer常用方法和区别

简单叙述

String 和 StringBuilder 和 StringBuffer 都不是类似于与基本数据类型(int 和 double)这样的已经设置好的。而是继承或实现某个类的一种数据类型,他们有各自类中的内部API。

String

  1. 遍历
    String 的遍历一般就二种,一种是使用 API 中的 charAt 中的方法,另一种则是 toCharArray 方法新形成一个字符数组。
    总体思想都是 先看待为字符组合,然后依次查询操作。
  2. 比较
    简单来说只有 compareTo 和 equals 二种方法,当然在它们的基础上还各自扩充了 compareToIgnoreCase 和 equalsIgnoreCase 来忽视字符串中的大小写差异。
    – compareTo方法返回的是数字(以0为界),而equals则是返回布尔值。
  3. 搜索子字符串
indexOf(int ch);					// 返回指定字符在此字符串中第一次出现的索引
indexOf(int ch, int fromindex); 	// 同上, 从指定索引开始搜索
indexOf(String str);				//返回子串在此字符串中第一次出现的索引
indexOf(String str, int fromindex);	//同上,从指定索引开始搜索

lastIndexOf(int ch);				//返回指定字符在此字符串最后一次出现的索引
lastIndexOf(int ch, int fromindex);	//同上, 从指定索引开始搜索
lastIndexOf(String str);			//返回子串在此字符串最后一次出现的索引
lastIndexOf(String str, int fromindex);	//同上, 从指定索引开始搜索

startsWith(String prefix);			// 检查是否以某一前缀开始

  1. 字符串拆分
    split(String regex);
  2. 提取子字符串
    substring(int beginIndex, int endIndex);
  3. 子串替换
    replaceAll(String s1,String s2);
    replaceFirst(String s1,String s2);
  4. 转换大小写
    toUpperCase();
    toLowerCase();
  5. 将其他类型的数据转化为字符串
    valueOf(char[] data);
    valueOf(char[] data,int offset, int count)
    valueOf(int i);

StringBulider(长度可变)

  1. 构造声明
StringBuilder s = new StringBuilder();
StringBuilder s1 = new StringBuilder("abc");

  1. 遍历
    使用API中的charAt即可。
  2. 增删改查
    ①增加
append(String str);							//在此字符串追加str。
append(StringBuilder str);					//在此字符串追加str。
append(char[] str, int offset, int len);	//将char的子数组追加到此字符串

②删除

delete(int start, int end);		//移除此序列从start到end-1的字符串
deleteCharAt(int index);		//移除指定索引上的char

③修改

setCharAt(int index, char ch);	//将指定索引处的字符替换为ch

④查找

indexOf(String str);					//返回子字符串第一次出现的索引
indexOf(String str, int fromIndex);		//同上,从指定位置查找

lastIndexOf(String str);				//返回子字符串最后一次出现的索引
lastIndexOf(String str, int fromIndex);	//同上,从指定位置查找

  1. 截取
substring(int start);			//返回此字符串从start开始至length-1结束的String
substring(int start, int end);	//返回此字符串从start开始至end-1结束的String
toString();						//返回此序列中的String表示形式。
								//(注意以上方法的返回值都是String而不是StringBuilder)
  1. 反转
reverse();	//将此字符串反转

Calendar类

常用的日历字段

YEAR 指示年的 get 和 set 的字段数字。
MONTH 指示月份的 get 和 set 的字段数字。
DAY_OF_MONTH get 和 set 的字段数字, 指示一个月中的某天。
DAY_OF_WEEK get 和 set 的字段数字, 指示一个星期中的某天。
DAY_OF_YEAR get 和 set 的字段数字, 指示当前年中的天数。
DAY_OF_WEEK_IN_MONTH get 和 set的字段数字, 指示当前月中的第几个星期。
HOUR get 和 set 的字段数字,指示当天中的某小时
MINUTE get 和 set的字段数字,指示当前小时中的某分钟
SECOND get 和 set 的字段数字,指示当前分钟中的某秒 time
以毫秒为单位,表示自格林威治标准时间 1970 年 1月 1 日 0:00:00 后经过的时间。

使用

  1. 实例化
Calendar calendar = Calendar.getInstance();//赋值给calendar

  1. 获取信息
    – 获取当前Calender实例的字段信息
get(int field);// 获取给定字段的值
  1. 注意
    MONTH 字段是从0月开始计数的,所以12月对应的值是11。
    DAY_OF_WEEK 中星期天对应的是1,星期一对应的是2,星期六对应的是7,
    而YEAR和DAY_OF_MONTH都是从1开始计数

`

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值