蓝桥杯基础练习技巧用法之BigInteger和BigDecimal

使用的语言
c++
格式

#include <iostream>
 
using namespace std;
 
int main()
{

    return 0;
}

c

#include <stdio.h>
 
int main()
{
    return 0;
}

java

import java.util.*;
 
public class Main
{
    public static void main(String args[])
    {
       
    }
}

特别注意 Java在蓝桥杯练习系统中, 类名一定要是Main 否则就运行不了

接下来是c++和java的函数运用在做题当中
当别人还在用传统c慢慢遍历的时候,一句话搞定复杂的循环,十分方便快捷,也不需要死记硬背,用的时候可以查一下API.
这里梳理一下最基础的,碰到此类题就能直接运用。

java中的基础数据类型能存储的最大的二进制数是 2 ^ 63 - 1,
对应的十进制数是9223372036854775807,也就是说只要运算过程中会超过这个数,就会造成数据溢出,从而造成错误.

介绍

而java.math.*包中提供了大数类,其理论上可以存储无限位的大数,只要内存足够的话。
大数类又分为整数BigInteger浮点数BigDecimal
大数类的对象不能直接进行运算,需要调用类中相应的方法,并且方法的参数必须和调用的类相同,BigInteger不能调用BigDecimal,
不能作为其方法参数, 即整数和浮点数不能混合运算.

示例代码

//直接声明创建
bigInteger a;
brgDecimal b;
//构造函数创建
BigInteger a = new BigInteger("123456789101112131415");
BigDecimal b = new BigDecimal("123456.123456");

BigInteger.valueOf(long val);
BigDecimal.varlueOf(double val);
//注意 val 不能超过 long 类型的最大取值9223372036854775807, 超过int时要在数后面加L如:
a = BigInteger.valueOf(123456789101112L); //大于int范围的要加L
b = BigDecimal.valueOf(123456.12341235); // 超出的小数位数会自动舍弃 

BigInteger c;
c=a.add(b);//加法
c = a.subtract(b);//减法
c = a.multiply(b);//乘法
c = a.divide(b); //除法
c = a.mod(b);//取余
c = a.gcd(b);//求最大公因数
c = a.max(b); //a,b中的最大值
d = a.min(b); //a,b中的最小值
c = a.compareTo(b);  // a 和 b
/* 对于a.compareTo(b), a和b进行比较如果:
a > b  返回 1  
a == b 返回 0 
a < b  返回-1*/

数据类型的大小
在这里插入图片描述
使用构造函数BigInteger(String, int index);可以把一个index进制的字符串,转化为10进制的BigInteger;

BigInteger a = new BigInteger("111110", 2);//把111110(本来是2进制)变为10进制赋值给a
System.out.println(a.toString(16));//把a转化为16进制的字符串输出

类型转化

BigInteger.toBigDecimal() //把BigInteger 转化为 BigDecimal
BigDecimal.toBigInteger() //把BigDecimal 转化为 BigInteger
BigInteger a = new BigInteger(1);
BigDecimal b = new BigDecimal(2);
b.toBigInteger(); // 把BigDecimal转为BigInteger
a.toBigDecimal(); // 把BigInteger转为BigDecimal

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
有精确的位数时,不需要舍入

在需要精确舍入的方式时可以使用以上的舍入模式。
(另:Math 类的 ceil()和 floor方法对应普通浮点型的上取整和下取整.)
BigDecimal进行加减乘除时可以进行舍入
除法

divide(BigDecimal divisor, int scale, RoundingMode.roundingMode) 返回一个
BigDecimal ,其值为 (this / divisor) ,其小数位数为scale。

c = a.divide(b,100,BigDecimal.ROUND_DOWN);//采用向0舍入并并保留100位小数

保留n位小数

setScale(int newScale, RoundingMode.roundingMode);

a = a.setScale(4,BigDecimal.ROUND_HALF_UP);//四舍五入保留四位小数
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜小爷�

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值