題目如題,因為剛好學到大數,所以程式里把整數轉換成大數了

右邊的程式能跑起來,結果也對
左邊的程式就不行,不知道問題出在哪里了
提示:中獎概率的演算法是:

求大佬們救救我!!!
uj5u.com熱心網友回復:
左邊公式都不對。參照右邊寫
uj5u.com熱心網友回復:
是的呀,你左邊實作的公式都沒有寫對,結果怎么能正確呢,兩種回圈的類比代碼如下,你的for的演算法寫對了,這里只給你do...while回圈的,你自己也可以考慮用while回圈寫一下。代碼邏輯跟for回圈的一樣,你應該能看的懂,知識語法不一而已
Scanner scan = new Scanner(System.in);
System.out.println("你要抽取多少個數:");
int k = scan.nextInt();
System.out.println("連續整數列中最大的數為:");
int n = scan.nextInt();
BigInteger lotteryOdds = BigInteger.valueOf(1);
int i = 1;
do {
lotteryOdds = lotteryOdds.multiply(BigInteger.valueOf(n-i+1))
.divide(BigInteger.valueOf(i));
i++;
}while(i<=k);
System.out.print("你中獎的概率為:1/");
System.out.println(lotteryOdds);
// scan.close();
uj5u.com熱心網友回復:
不是啊朋友們,比如說從5個數里面抽4個數。那按照右邊的公式來算,總的可能性是:(5*4*3*2)/(1*2*3*4)
右邊的演算法是:(5*4*3*2)/(4*3*2*1)
僅僅是分母倒敘相乘和正序相乘的區別啊!
我感覺語法和邏輯上,左邊的也能行得通,但是就是輸不出正確結果。
uj5u.com熱心網友回復:
手誤打錯了,是:那按照右邊的公式來算,總的可能性是:(5*4*3*2)/(1*2*3*4)
左邊的演算法是:(5*4*3*2)/(4*3*2*1)
uj5u.com熱心網友回復:
大佬們,我知道公式為啥不能像左邊一樣那么寫了。但是還有一個新的問題為什么不能以這種自減的方式來計算呢?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/124600.html
標籤:Java SE
上一篇:代碼注釋
下一篇:eclipse安裝教程
