在算法竞赛或者面试中我们经常遇到大数问题,例如求一个很大的阶层,大数加法等等。

住在这种情况下我们用常规解法(使用long long或long long int)肯定是不行的,

而我们自己用c/c++写一个大数的算法又过于麻烦且易于出错,

在这种情况下使用java中自带的大数类是我们最好的选择,

相对比c/c++比较而言,java语言写大数是比较流氓的,但是代码量非常的少,而且容易理解,

你只需要调包就可以了。

BigInteger

package 大数;

import java.math.BigInteger;
import java.util.Scanner;

public class 大数 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        BigInteger b1=new BigInteger("123456789");
        BigInteger b2=new BigInteger("987654321");
        System.out.println("加法操作:"+b2.add(b1));
        System.out.println("减法操作:"+b2.subtract(b1));
        System.out.println("乘法操作:"+b2.multiply(b1));
        System.out.println("除法操作:"+b2.divide(b1));
        System.out.println("最大数:"+b2.max(b1));
        System.out.println("最小数:"+b2.min(b1));
        BigInteger result[]=b2.divideAndRemainder(b1);
        System.out.println("商是:"+result[0]+" "+"余数是:"+result[1]);
    }

}

1.定义常用方法:

BigInteger a=new BigInteger(“123”);  //第一种,参数是字符串
BigInteger a=BigInteger.valueOf(123);    //第二种,参数可以是int、long

2.大整数比较大小

a.equals(b);  //如果a、b相等返回true否则返回false
a.compareTo(b);  //a小于b返回-1,等于返回0,大于返回1

3.大数常用方法及常量

 a.mod(b);  //求余
 a.gcd(b);  //求最大公约数
 a.max(b);  //求最大值
 a.min(b);  //求最小值
BigInteger.ZERO    //大整数0
BigInteger.ONE    //大整数1
BigInteger.TEN   //大整数10
//先转换成字符串再求字符串的长度
a.toString().length();   //a的类型为BigInteger

BigDecimal

使用此类可以完成大的小数操作,而且也可以使用此类进行精确的四舍五入,这一点在开发中经常使用。
        对于不需要任何准确计算精度的程序可以直接使用float或double完成,但是如果需要精确计算结果,则必须使用BigDecimal类。

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;

public class 大数 {
    public static void main(String[] args) {
        System.out.println("加法运算:" + MyMath.round(MyMath.add(10.345, 3.333), 1));
        System.out.println("减法运算:" + MyMath.round(MyMath.sub(10.345, 3.333), 3));
        System.out.println("乘法运算:" + MyMath.round(MyMath.mul(10.345, 3.333), 4));
        System.out.println("除法运算:" + MyMath.div(10.345, 3.333, 3));
    }
}

class MyMath {
    public static double add(double d1, double d2) { // 进行加法计算
        BigDecimal b1 = new BigDecimal(d1);
        BigDecimal b2 = new BigDecimal(d2);
        return b1.add(b2).doubleValue();
    }

    public static double sub(double d1, double d2) { // 进行减法计算
        BigDecimal b1 = new BigDecimal(d1);
        BigDecimal b2 = new BigDecimal(d2);
        return b1.subtract(b2).doubleValue();
    }

    public static double mul(double d1, double d2) { // 进行乘法计算
        BigDecimal b1 = new BigDecimal(d1);
        BigDecimal b2 = new BigDecimal(d2);
        return b1.multiply(b2).doubleValue();
    }

    public static double div(double d1, double d2, int len) { // 进行除法计算
        BigDecimal b1 = new BigDecimal(d1);
        BigDecimal b2 = new BigDecimal(d2);
        return b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    public static double round(double d, int len) { // 进行四舍五入
        BigDecimal b1 = new BigDecimal(d);
        BigDecimal b2 = new BigDecimal(1); // 技巧
        return b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
}

java大数运算(讲解)的更多相关文章

  1. 收藏的一段关于java大数运算的代码

    收藏的一段关于java大数运算的代码: package study_02.number; import java.math.BigDecimal; import java.math.BigIntege ...

  2. java 大数运算[转]

    用JAVA 实现算术表达式(1234324234324 + 8938459043545)/5 + 343434343432.59845 因为JAVA语言中的long 定义的变量值的最大数受到限制,例如 ...

  3. JAVA大数运算

    java大数是个好东西,用起来方便,代码短. 代码如下: import java.util.*; import java.math.*; public class Main { public stat ...

  4. java 大数详细讲解

    介绍 java中用于操作大叔的类主要有俩种 第一个是BigInteger,代表大整数.第二个是BigDecimal,代表大浮点数.两种类的操作方法类似,所以我们只讲解BigInterger的用法 基本 ...

  5. java 大数运算,高精度模板

    转自:https://blog.csdn.net/stffer/article/details/46382949 有修改 关于BigInteger类更详细的用法请移步官方文档 package prac ...

  6. 通俗易懂的 Java 位操作运算讲解

    所有数值都是2进制 软件开发者都知道 10 进制.16 进制.8 进制. 比如数字 10 的各位进制形式表现如下. 十进制:10 八进制:012 十六进制:0x0a 二进制:1010 原码 反码 补码 ...

  7. Java 大数运算

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

  8. 可能是最通俗易懂的 Java 位操作运算讲解

    https://blog.csdn.net/briblue/article/details/70296326

  9. 大数运算之 Java BigInteger 的基本用法

    大数运算之 Java BigInteger 的基本用法 在程序设计竞赛中会遇到高精度运算的问题,C++没有高精度运算,只能手动模拟人工运算,手动实现高精度,而 java.math 包中的 BigInt ...

随机推荐

  1. linux虚拟化简介

    为跨平台而生 在计算机发展的早期,各类计算平台.计算设备所提供的接口.调用方式纷繁复杂,没有像今天这样相对统一的标准.由于需要适配不同的平台,需要写很多繁琐的兼容代码,这无形中给开发者带来了很大的不便 ...

  2. github博客Hexo引流到微信

    相信有不少小伙伴都在github上创建了属于自己的博客,其中用Hexo的Next主题应该不少,那么,我们究竟该如何将博客的流量引流到微信呢?今天就来带你看一看. 如何引流 现在网上有一种套路,当你在看 ...

  3. C++中类型强制转换

    C++中强制类型转换有四种: 1.static_cast 格式:static_cast<Type>(Value); --用于基本类型间的转换,但不能用于基本类型指针间的转换: int i ...

  4. 程序员写 2000 行 if else?领导:这个锅我不背

    前言 知乎上有小伙伴提了这么一个问题,如何看待陕西省普通话水平测试成绩查询系统?查询系统前端代码就直接给出了身份账号,姓名,证书编号,如果信息是真的,就泄露了这么多考生的信息,白给那种.为什么会发生这 ...

  5. Jmeter日记,很乱很随意

    这个笔记是写给自己看的,很乱很随意,可能以后自己都看不懂.哈哈 Jmeter两种录制方式: 1使用badboy 2.使用代理 浏览器设置代理 参数化 随机参数化 插件的使用 官网下载和说明https: ...

  6. Hive窗口函数最全案例详解

    语法: 分析函数 over(partition by 列名 order by 列名 rows between 开始位置 and 结束位置) 常用分析函数: 聚合类 avg().sum().max(). ...

  7. springboot 集成Redis一主二从三哨兵

    1.Centos7 Redis一主二从三哨兵配置 Redis一主二从三哨兵环境搭建 2.接入过程 与集成redis单机不同的是jedis相关的配置做了修改,JedisPool换成了JedisSenti ...

  8. Mybatis的xml文件对大于号小于号的特殊处理!

    当我们需要通过xml格式处理sql语句时,经常会用到< ,<=,>,>=等符号,但是很容易引起xml格式的错误,这样会导致后台将xml字符串转换为xml文档时报错,从而导致程序 ...

  9. postman工具使用小结

    序言 现在,postman在做接口测试方面,发挥着越来越重大的作用,其支持多种请求方式.并可以模拟各种类型的数据请求类型,在实际开发中使用它可以极大的提高开发的效率. 安装postman 1.  安装 ...

  10. 网络下载器 Internet Download Manager v6.35.5 绿色便携版

    Internet Download Manager,简称 IDM,是国外的一款优秀网络下载工具.目前凭借着下载计算的速度优势在外媒网站中均受好评,现在已被多数国人熟知.Internet Downloa ...