Java源码——使用BigInteger计算组合数(彩票中奖概率计算示例)
1. 问题描述
双色球中,红色球选号规则:红色球可以在1-33个编号中任意选择6个。
问题:红色球全部选中的概率为多少?
2. 代码:
package v1ch03.BigIntegerTest;import java.math.*;
import java.util.*;/*** This program uses big numbers to compute the odds of winning the grand prize in a lottery.* @version 1.20 2004-02-10* @author Cay Horstmann*/
public class BigIntegerTest
{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+1)/(1*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!");}
}
运行结果:
How many numbers do you need to draw? 6
What is the highest number you can draw? 33
Your odds are 1 in 1107568. Good luck!
即,红色球全部选中的概率为:1107568分之一(约111万分之一)。
另外,本程序也可以演示BigInterger类的强大之处,如下所示:
How many numbers do you need to draw? 500
What is the highest number you can draw? 5000
Your odds are 1 in 152383570502276241773112299038287011759805517717774989612063963324852197721349960590884233711082048864016759544054508257767390473359453022881045964121514812790325726285875069528156914452728158646183348385785484897051302963702456469661925649013938025675652103406710218905355077057732196294852278472953496440392540565238652496586095257231832780763525058654245376714838913660805861811146730935555609878975704618923988507281746376470494321008996284739018893410735106722857930028973378877130054931747509530956061693359470175950233574962808714004842287921921934995121777448532875190191549476629085646880295182806621692835943142454947817131669088583382928050125741393952210717943794438066831202814961683139272640. Good luck!
若在Excel中使用Combin()函数来计算,Combin(5000,500),将会发现溢出错误(#NUM)。而本程序的计算结果为705位数之多。至于最高支持多少位的计算,暂不深究,够用就行。
Java源码——使用BigInteger计算组合数(彩票中奖概率计算示例)相关推荐
- 彩票中奖概率计算过程
周六周末无聊,想着买彩票,万一中奖了就不用上班啦,哈哈.所以就计算了一下中奖概率. 中奖规则: 一等奖:投注号码与当期开奖号码全部相同(顺序不限,下同),即中奖: 二等奖:投注号码与当期开奖号码中的6 ...
- 比较精确的计算农历节气的java源码
在网上找了好多计算农历节气的java源码,有好多都有误差,另外靠存储查找的方法终究不靠谱. 最近在"绿色冰点"的博客上看到了关于"寿星万年历---java算法实现&quo ...
- JAVA源码优化、分析工具
JAVA源码优化.分析工具 一.11款用于优化.分析源代码的Java工具 1. PMD from http://pmd.sourceforge.net/ PMD能够扫描Java 源代码,查找类似以下的 ...
- 面试官系统精讲Java源码及大厂真题 - 30 AbstractQueuedSynchronizer 源码解析(上)
30 AbstractQueuedSynchronizer 源码解析(上) 不想当将军的士兵,不是好士兵. 引导语 AbstractQueuedSynchronizer 中文翻译叫做同步器,简称 AQ ...
- 面试官系统精讲Java源码及大厂真题 - 07 List 源码会问哪些面试题
07 List 源码会问哪些面试题 勤学如春起之苗,不见其增,日有所长. --陶潜 引导语 List 作为工作中最常见的集合类型,在面试过程中,也是经常会被问到各种各样的面试题,一般来说,只要你看过源 ...
- java hashset 实现_HashSet实现原理分析(Java源码剖析)
本文将深入讨论HashSet实现原理的源码细节.在分析源码之前,首先我们需要对HashSet有一个基本的理解. HashSet只存储不同的值,set中是不会出现重复值的. HashSet和HashMa ...
- 面试官:背了几道面试题就敢说熟悉Java源码?我们不招连源码都不会看的人|原力计划...
作者|Baldwin_KeepMind 责编|伍杏玲 出品|CSDN博客 我的真实经历 标题是我2019.6.28在深圳某500强公司面试时候面试官跟我说的话,即使是现在想起来,也是觉得无尽的羞愧,因 ...
- 华为OD机试(21-40)老题库解析Java源码系列连载ing
华为OD机试算法题新老题库练习及源码 老题库 21.字符串序列判定 22.最长的指定瑕疵度的元音子串 23.处理器问题 24.单向链表中间节点 25.字符串重新排列.字符串重新排序 26.完美走位 2 ...
- 转载:深入学习java源码之Callable.call()与Future.get()
原始链接:https://blog.csdn.net/qq_35029061/article/details/86750369 深入学习java源码之Callable.call()与Future.ge ...
最新文章
- C# 实现对接电信交费易自动缴费 续(winio/winring0 自动填密码)
- Sticker.js生成图片或者页面元素“速干贴”效果
- Ubuntu之GCC:GCC编译器的简介、安装、使用方法之详细攻略
- JPA(二):HellWord工程
- CMMI for Development读书笔记-目录
- vb excel遍历列_EXCEL如何把多个表格合并成一个表格
- python捕获摄像头帧_Xuggler教程:帧捕获和视频创建
- spring-security-学习笔记-02-基于Session的认证方式
- 能力清单:2020年SAAS的思考框架
- docker之阿里云centos 7.x 启动容器报错处理办法
- shader 隐身_如何超越隐身障碍
- css自动换行加前置_StudyNode -- CSS
- Memory Management in AIR / AS3 / Flash Garbage Collection.
- linux串口链接扫码枪,串口扫描枪怎样使用?
- 见过这么有才的笑话吗?
- URAL1325-Dirt
- Assets, Objects and serialization Assets, Objects与序列化 最佳实践系列3
- win7设置ipsec_解决win7连接IPsec报错789和809错误
- ubuntu 下的pdfcrop功能不(pdf剪切)
- 服务器的备份文件在哪里找,云服务器系统如何备份文件在哪里看