热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java中biginteger和bigdecimal在大数计算中的使用

java中的BigInteger和BigIntegerDecimal当我们在做Acm的大数题时,我们会发现int,double,表示的范围有限,不能够满足要求,对于cc++
java中的BigInteger和BigIntegerDecimal
当我们在做Acm的大数题时,我们会发现int,double,表示的范围有限,不能够满足要求,对于c/c++而言,我们就只能采用数组模拟的方法来实现高精度大数的操作。然而java的jdk1.5后就可以使用math包中的BigInteger和BigDecimal来帮助我们解决高精度大数和小数的问题。

1 BigInteger高精度整数的使用。下面给出一些BigInteger的函数方法
ps:参考http://www.apihome.cn/api/java/BigInteger.html具体方法请打开链接
 BigInteger abs()
          返回其值是此 BigInteger 的绝对值的 BigInteger。
 BigInteger add(BigInteger val)
          返回其值为 (this + val) 的 BigInteger。
 BigInteger and(BigInteger val)
          返回其值为 (this & val) 的 BigInteger。
 BigInteger andNot(BigInteger val)
          返回其值为 (this & ~val) 的 BigInteger。
 int bitCount()
          返回此 BigInteger 的二进制补码表示形式中与符号不同的位的数量。
 int bitLength()
          返回此 BigInteger 的最小的二进制补码表示形式的位数,不包括 符号位。
 BigInteger clearBit(int n)
          返回其值与清除了指定位的此 BigInteger 等效的 BigInteger。
 int compareTo(BigInteger val)
          将此 BigInteger 与指定的 BigInteger 进行比较。
 BigInteger divide(BigInteger val)
          返回其值为 (this / val) 的 BigInteger。
 BigInteger[] divideAndRemainder(BigInteger val)
          返回包含 (this / val) 后跟 (this % val) 的两个 BigInteger 的数组。
 double doubleValue()
          将此 BigInteger 转换为 double
 boolean equals(Object x)
          比较此 BigInteger 与指定的 Object 的相等性。
 BigInteger flipBit(int n)
          返回其值与对此 BigInteger 进行指定位翻转后的值等效的 BigInteger。
 float floatValue()
          将此 BigInteger 转换为 float
 BigInteger gcd(BigInteger val)
          返回一个 BigInteger,其值是 abs(this)abs(val) 的最大公约数。
 int getLowestSetBit()
          返回此 BigInteger 最右端(最低位)1 比特的索引(即从此字节的右端开始到本字节中最右端 1 比特之间的 0 比特的位数)。
 int hashCode()
          返回此 BigInteger 的哈希码。
 int intValue()
          将此 BigInteger 转换为 int
 boolean isProbablePrime(int certainty)
          如果此 BigInteger 可能为素数,则返回 true,如果它一定为合数,则返回 false
 long longValue()
          将此 BigInteger 转换为 long
 BigInteger max(BigInteger val)
          返回此 BigInteger 和 val 的最大值。
 BigInteger min(BigInteger val)
          返回此 BigInteger 和 val 的最小值。
 BigInteger mod(BigInteger m)
          返回其值为 (this mod m) 的 BigInteger。
 BigInteger modInverse(BigInteger m)
          返回其值为 (this-1 mod m) 的 BigInteger。
 BigInteger modPow(BigInteger exponent, BigInteger m)
          返回其值为 (thisexponent mod m) 的 BigInteger。
 BigInteger multiply(BigInteger val)
          返回其值为 (this * val) 的 BigInteger。
 BigInteger negate()
          返回其值是 (-this) 的 BigInteger。
 BigInteger nextProbablePrime()
          返回大于此 BigInteger 的可能为素数的第一个整数。
 BigInteger not()
          返回其值为 (~this) 的 BigInteger。
 BigInteger or(BigInteger val)
          返回其值为 (this | val) 的 BigInteger。
 BigInteger pow(int exponent)
          返回其值为 (thisexponent) 的 BigInteger。
static BigInteger probablePrime(int bitLength, Random rnd)
          返回有可能是素数的、具有指定长度的正 BigInteger。
 BigInteger remainder(BigInteger val)
          返回其值为 (this % val) 的 BigInteger。
 BigInteger setBit(int n)
          返回其值与设置了指定位的此 BigInteger 等效的 BigInteger。
 BigInteger shiftLeft(int n)
          返回其值为 (this < 的 BigInteger。
 BigInteger shiftRight(int n)
          返回其值为 (this >> n) 的 BigInteger。
 int signum()
          返回此 BigInteger 的正负号函数。
 BigInteger subtract(BigInteger val)
          返回其值为 (this - val) 的 BigInteger。
 boolean testBit(int n)
          当且仅当设置了指定的位时,返回 true
 byte[] toByteArray()
          返回一个 byte 数组,该数组包含此 BigInteger 的二进制补码表示形式。
 String toString()
          返回此 BigInteger 的十进制字符串表示形式。
 String toString(int radix)
          返回此 BigInteger 的给定基数的字符串表示形式。
static BigInteger valueOf(long val)
          返回其值等于指定 long 的值的 BigInteger。
 BigInteger xor(BigInteger val)
          返回其值为 (this ^ val) 的 BigInteger。
我们可以利用BigInteger中的方法实现赋值,加减乘除,取模等各种运算,java中并没有重载运算符,所以不可以使用运算操作符,要使用函数。BigInteger还提供了三个常量
BigInteger.one  大数1
BigInteger.zero 大数0
BigInteger.ten 大数10
下面是是实现BigInteger基本功能的代码
import java.util.*;import java.math.*;
public class jichu {
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
BigInteger a,b,c;
while(cin.hasNextBigInteger())
{
a=cin.nextBigInteger();
b=cin.nextBigInteger();
c=a.add(b);//计算a+b
System.out.println(c);
c=a.multiply(b);//计算a*b
System.out.println(c);
c=a.subtract(b);//计算a-b
System.out.println(c);
c=a.divide(b);//计算a/b
System.out.println(c);
c=a.mod(b);//计算a%b
System.out.println(c);
}
cin.close();
}

}
就是对java中类的方法的使用,细心认真就可以
2BigDecimal的使用
BigDecimal的一些基本方法,具体参考http://www.apihome.cn/api/java/BigDecimal.html

BigDecimal abs()
          返回 BigDecimal,其值为此 BigDecimal 的绝对值,其标度为 this.scale()
 BigDecimal abs(MathContext mc)
          返回其值为此 BigDecimal 绝对值的 BigDecimal(根据上下文设置进行舍入)。
 BigDecimal add(BigDecimal augend)
          返回一个 BigDecimal,其值为 (this + augend),其标度为 max(this.scale(), augend.scale())
 BigDecimal add(BigDecimal augend, MathContext mc)
          返回其值为 (this + augend)BigDecimal(根据上下文设置进行舍入)。
 byte byteValueExact()
          将此 BigDecimal 转换为 byte,以检查丢失的信息。
 int compareTo(BigDecimal val)
          将此 BigDecimal 与指定的 BigDecimal 比较。
 BigDecimal divide(BigDecimal divisor)
          返回一个 BigDecimal,其值为 (this / divisor),其首选标度为 (this.scale() - divisor.scale());如果无法表示准确的商值(因为它有无穷的十进制扩展),则抛出ArithmeticException
 BigDecimal divide(BigDecimal divisor, int roundingMode)
          返回一个 BigDecimal,其值为 (this / divisor),其标度为 this.scale()
 BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
          返回一个 BigDecimal,其值为 (this / divisor),其标度为指定标度。
 BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
          返回一个 BigDecimal,其值为 (this / divisor),其标度为指定标度。
 BigDecimal divide(BigDecimal divisor, MathContext mc)
          返回其值为 (this / divisor)BigDecimal(根据上下文设置进行舍入)。
 BigDecimal divide(BigDecimal divisor, RoundingMode roundingMode)
          返回一个 BigDecimal,其值为 (this / divisor),其标度为 this.scale()
 BigDecimal[] divideAndRemainder(BigDecimal divisor)
          返回由两个元素组成的 BigDecimal 数组,该数组包含 divideToIntegralValue 的结果,后跟对两个操作数计算所得到的remainder
 BigDecimal[] divideAndRemainder(BigDecimal divisor, MathContext mc)
          返回由两个元素组成的 BigDecimal 数组,该数组包含 divideToIntegralValue 的结果,后跟根据上下文设置对两个操作数进行舍入计算所得到的remainder 的结果。
 BigDecimal divideToIntegralValue(BigDecimal divisor)
          返回 BigDecimal,其值为向下舍入所得商值 (this / divisor) 的整数部分。
 BigDecimal divideToIntegralValue(BigDecimal divisor, MathContext mc)
          返回 BigDecimal,其值为 (this / divisor) 的整数部分。
 double doubleValue()
          将此 BigDecimal 转换为 double
 boolean equals(Object x)
          比较此 BigDecimal 与指定的 Object 的相等性。
 float floatValue()
          将此 BigDecimal 转换为 float
 int hashCode()
          返回此 BigDecimal 的哈希码。
 int intValue()
          将此 BigDecimal 转换为 int
 int intValueExact()
          将此 BigDecimal 转换为 int,以检查丢失的信息。
 long longValue()
          将此 BigDecimal 转换为 long
 long longValueExact()
          将此 BigDecimal 转换为 long,以检查丢失的信息。
 BigDecimal max(BigDecimal val)
          返回此 BigDecimalval 的最大值。
 BigDecimal min(BigDecimal val)
          返回此 BigDecimalval 的最小值。
 BigDecimal movePointLeft(int n)
          返回一个 BigDecimal,它等效于将该值的小数点向左移动 n 位。
 BigDecimal movePointRight(int n)
          返回一个 BigDecimal,它等效于将该值的小数点向右移动 n 位。
 BigDecimal multiply(BigDecimal multiplicand)
          返回一个 BigDecimal,其值为 (this × multiplicand),其标度为 (this.scale() + multiplicand.scale())
 BigDecimal multiply(BigDecimal multiplicand, MathContext mc)
          返回其值为 (this × multiplicand)BigDecimal(根据上下文设置进行舍入)。
 BigDecimal negate()
          返回 BigDecimal,其值为 (-this),其标度为 this.scale()
 BigDecimal negate(MathContext mc)
          返回其值为 (-this)BigDecimal(根据上下文设置进行舍入)。
 BigDecimal plus()
          返回 BigDecimal,其值为 (+this),其标度为 this.scale()
 BigDecimal plus(MathContext mc)
          返回其值为 (+this)BigDecimal(根据上下文设置进行舍入)。
 BigDecimal pow(int n)
          返回其值为 (thisn)BigDecimal,准确计算该幂,使其具有无限精度。
 BigDecimal pow(int n, MathContext mc)
          返回其值为 (thisn)BigDecimal
 int precision()
          返回此 BigDecimal精度
 BigDecimal remainder(BigDecimal divisor)
          返回其值为 (this % divisor)BigDecimal
 BigDecimal remainder(BigDecimal divisor, MathContext mc)
          返回其值为 (this % divisor)BigDecimal(根据上下文设置进行舍入)。
 BigDecimal round(MathContext mc)
          返回根据 MathContext 设置进行舍入后的 BigDecimal
 int scale()
          返回此 BigDecimal标度
 BigDecimal scaleByPowerOfTen(int n)
          返回其数值等于 (this * 10n) 的 BigDecimal。
 BigDecimal setScale(int newScale)
          返回一个 BigDecimal,其标度为指定值,其值在数值上等于此 BigDecimal 的值。
 BigDecimal setScale(int newScale, int roundingMode)
          返回一个 BigDecimal,其标度为指定值,其非标度值通过此 BigDecimal 的非标度值乘以或除以十的适当次幂来确定,以维护其总值。
 BigDecimal setScale(int newScale, RoundingMode roundingMode)
          返回 BigDecimal,其标度为指定值,其非标度值通过此 BigDecimal 的非标度值乘以或除以十的适当次幂来确定,以维护其总值。
 short shortValueExact()
          将此 BigDecimal 转换为 short,以检查丢失的信息。
 int signum()
          返回此 BigDecimal 的正负号函数。
 BigDecimal stripTrailingZeros()
          返回数值上等于此小数,但从该表示形式移除所有尾部零的 BigDecimal
 BigDecimal subtract(BigDecimal subtrahend)
          返回一个 BigDecimal,其值为 (this - subtrahend),其标度为 max(this.scale(), subtrahend.scale())
 BigDecimal subtract(BigDecimal subtrahend, MathContext mc)
          返回其值为 (this - subtrahend)BigDecimal(根据上下文设置进行舍入)。
 BigInteger toBigInteger()
          将此 BigDecimal 转换为 BigInteger
 BigInteger toBigIntegerExact()
          将此 BigDecimal 转换为 BigInteger,以检查丢失的信息。
 String toEngineeringString()
          返回此 BigDecimal 的字符串表示形式,需要指数时,则使用工程计数法。
 String toPlainString()
          返回不带指数字段的此 BigDecimal 的字符串表示形式。
 String toString()
          返回此 BigDecimal 的字符串表示形式,如果需要指数,则使用科学记数法。
 BigDecimal ulp()
          返回此 BigDecimal 的 ulp(最后一位的单位)的大小。
 BigInteger unscaledValue()
          返回其值为此 BigDecimal非标度值BigInteger
static BigDecimal valueOf(double val)
          使用 Double.toString(double) 方法提供的 double 规范的字符串表示形式将 double 转换为BigDecimal
static BigDecimal valueOf(long val)
          将 long 值转换为具有零标度的 BigDecimal
static BigDecimal valueOf(long unscaledVal, int scale)
          将 long 非标度值和 int 标度转换为 BigDecimal
  BIgDecimal和BigInteger的基本使用方法差不多,要注意消除尾0,和转化为非指数型字符串输出
基本使用代码如下
import java.util.*;import java.math.*;
public class jichu {
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
BigDecimal a,b,c;
while(cin.hasNextBigDecimal())
{
a=cin.nextBigDecimal();
b=cin.nextBigDecimal();
c=a.add(b);//计算a+b//0.000001 0.000009
System.out.println(c);//0.000010
System.out.println(c.stripTrailingZeros());//消尾0输出//结果抛出异常0.00001//可以的使用MathContext()控制输出精度
System.out.println(c.stripTrailingZeros().toPlainString());//消尾0转化为非指数型字符串输出,等于没舍入的完整精度 //0.00001
c=a.multiply(b);//计算a*b
System.out.println(c);
c=a.subtract(b);//计算a-b
System.out.println(c);
c=a.divide(b, new MathContext(3));//计算a/控制保留三位有效数字
System.out.println(c);

}
cin.close();
}

}

以上就是java大数的基本用法,遇到具体问题再进行总结


























推荐阅读
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
author-avatar
mumei4_839_210
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有