Java中的BigInteger和BigDecimal类
我是个ACMnewer,看到ACM中很多题目涉及到高精度运算,以前都是用C来模拟的,但是后来看到大家遇到这种题都直接用Java的BigInteger和BigDecimal...
我是个ACM newer,看到ACM中很多题目涉及到高精度运算,以前都是用C来模拟的,但是后来看到大家遇到这种题都直接用Java的BigInteger和BigDecimal类,我想问一下其中有哪些使用方法及函数,先谢过了
不知道每个函数分别是什么功能啊…… 展开
不知道每个函数分别是什么功能啊…… 展开
4个回答
展开全部
java写高精度运算~~跟C写的差不多。
先开两个数组,每一位数组元素存一位大整数数位
比如456687855就是
0 1 2 3 4 5 6 7 8 9
5 5 8 7 8 6 6 5 4
做+法就是两个数组按位相加然后进位
做减法就是按位相减然后借位
乘法就是取第二数组的数字按位与一数组乘
再把乘到东西累加起来
除法就是你怎么算就怎么写程序就行。
C(1000,500) 这样的东西不能直接去算。
否则算到100000,50000就铁定超时了(1个小时未必算的出来)
你把100000所有质数存在数组里。
算的时候相乘就是把所有因数累加进各质数的变量。除的时候就减
比如质数数列
0 1 2 3 4 5 6 7 8 9 //数组位
2 3 5 7 11 13 17 19 23 29 //质数
10 8 3 2 0 0 0 0 0 0 //在这个大数字中有多少个质数相乘
现在这个大数字要*210
就变成
11 9 4 3 0 0 0 0 0 0
再除2就是
10 9 4 3 0 0 0 0 0 0
最后再算2^n2+3^n3+………………就行
其实还有更快的方法这个是数论讨论的范围。
想想还是能改进效率的。
但是思路到这就已经清晰了。
先开两个数组,每一位数组元素存一位大整数数位
比如456687855就是
0 1 2 3 4 5 6 7 8 9
5 5 8 7 8 6 6 5 4
做+法就是两个数组按位相加然后进位
做减法就是按位相减然后借位
乘法就是取第二数组的数字按位与一数组乘
再把乘到东西累加起来
除法就是你怎么算就怎么写程序就行。
C(1000,500) 这样的东西不能直接去算。
否则算到100000,50000就铁定超时了(1个小时未必算的出来)
你把100000所有质数存在数组里。
算的时候相乘就是把所有因数累加进各质数的变量。除的时候就减
比如质数数列
0 1 2 3 4 5 6 7 8 9 //数组位
2 3 5 7 11 13 17 19 23 29 //质数
10 8 3 2 0 0 0 0 0 0 //在这个大数字中有多少个质数相乘
现在这个大数字要*210
就变成
11 9 4 3 0 0 0 0 0 0
再除2就是
10 9 4 3 0 0 0 0 0 0
最后再算2^n2+3^n3+………………就行
其实还有更快的方法这个是数论讨论的范围。
想想还是能改进效率的。
但是思路到这就已经清晰了。
展开全部
你还真会偷懒啊,自己看一下API不就知道了么
没有的话可以留邮箱,我发给你
给你列几个常用的吧
public BigDecimal add(BigDecimal augend)
返回一个 BigDecimal,其值为 (this + augend),其标度为 max(this.scale(), augend.scale())。也就是加法
public BigDecimal subtract(BigDecimal subtrahend)
返回一个 BigDecimal,其值为 (this - subtrahend),其标度为 max(this.scale(), subtrahend.scale())。 减法
public BigDecimal multiply(BigDecimal multiplicand)
返回一个 BigDecimal,其值为 (this × multiplicand),其标度为 (this.scale() + multiplicand.scale())。 乘法
public BigDecimal divide(BigDecimal divisor,RoundingMode roundingMode)
返回一个 BigDecimal,其值为 (this / divisor),其标度为 this.scale()。如果必须执行舍入,以生成具有给定标度的结果,则应用指定的舍入模式。 除法
参数:
divisor - 此 BigDecimal 要除以的值。
roundingMode - 要应用的舍入模式。
没有的话可以留邮箱,我发给你
给你列几个常用的吧
public BigDecimal add(BigDecimal augend)
返回一个 BigDecimal,其值为 (this + augend),其标度为 max(this.scale(), augend.scale())。也就是加法
public BigDecimal subtract(BigDecimal subtrahend)
返回一个 BigDecimal,其值为 (this - subtrahend),其标度为 max(this.scale(), subtrahend.scale())。 减法
public BigDecimal multiply(BigDecimal multiplicand)
返回一个 BigDecimal,其值为 (this × multiplicand),其标度为 (this.scale() + multiplicand.scale())。 乘法
public BigDecimal divide(BigDecimal divisor,RoundingMode roundingMode)
返回一个 BigDecimal,其值为 (this / divisor),其标度为 this.scale()。如果必须执行舍入,以生成具有给定标度的结果,则应用指定的舍入模式。 除法
参数:
divisor - 此 BigDecimal 要除以的值。
roundingMode - 要应用的舍入模式。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
BigInteger是没有位数限制的整数,因为我们知道int类型是只占有四个字节的。
而double,float也是只占有16位的,并且如果直接通过double运算,会导致意想不到的精度值,而要进行高精度计算就需要用BigDecimal来代替double和float。
http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/
而double,float也是只占有16位的,并且如果直接通过double运算,会导致意想不到的精度值,而要进行高精度计算就需要用BigDecimal来代替double和float。
http://gceclub.sun.com.cn/Java_Docs/jdk6/html/zh_CN/api/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
自己查看java的api吧 很多方法的,自己看下能加深印象
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询