使用的教材是java核心技术卷1,我将跟着这本书的章节同时配合视频资源来进行学习基础java知识。
day009 大数值
如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有用的类:Biglnteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。Biglnteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。
使用静态的valueOf方法可以将普通的数值转换为大数值:
Biglnteger a = Biglnteger.valueOf(100);
我们不能使用熟悉的算术运算符(如:+ 和 * )处理大数值。而需要使用大数值类中的add和multiply方法。
Biglnteger c = a.add(b); // c = a + b
Biglnteger d = c.multiply(b.add(Biglnteger.valueOf(2))); //d = c * (b + 2)
采用大数值进行运算中彩概率的程序。假设你被邀请参加抽奖活动,并从490个可能的数值中抽取60个,这个程序将会得到中彩概率1/716395843461995557415116222540092933411717612789263493493351013459481104668848。
import java.math.BigInteger;
import java.util.Scanner;
public class He
{
public static void main(String[] args)
{Scanner in = new Scanner(System.in);
System.out.print("How many numbers do you need to draw? ");
int k = in.nextInt();
System.out.print("What is the highest number you can draw? ");
int n =in.nextInt();
/*
*compute binomial coefficient n*(n-1 )*(n-2)*...*(n-k+l )/(l*2*3*...*k)
*/
BigInteger lotteryOdds = BigInteger.valueOf(1);
for (int i =1 ;i <= k;i++)
lotteryOdds = lotteryOdds.multiply(BigInteger.valueOf(n -i+1 )).divide(BigInteger.valueOf(i));
System.out.println("Your odds are 1 in "+lotteryOdds+ "Good luck!");
}
}
程序中用于计算的语句是:
lotteryOdds = lotteryOdds*(n -i+1 )/i;
如果使用大数值,则相应的语句为:
lotteryOdds = lotteryOdds.multiply(BigInteger.valueOf(n -i+l )).divide(Biglnteger.valueOf(i));
看一下API文档中这两个的用法: