public static double jackpotChance(int k, int highestNumber, int m)
{
long temp = 1;
long tempK = 1;
for(int i = 0; i < k; i++)
{
temp = temp * (highestNumber-i);
System.out.println(temp);
}
for(int u = 0; u < k; u++)
{
tempK = tempK * (k-u);
System.out.println(tempK);
}
double jackpotChance;
jackpotChance = (temp/tempK)*m;
return jackpotChance;
}
对于highestNumber来说,高于~30将给出一个错误的临时数,因此给了我一个关于jackpotChance的错误号码。我在java.math类中听说过BigNumber,我尝试使用它,但由于某种原因它不会让我转换到数字类型之间。任何建议将不胜感激。是的,这是一个家庭作业问题,所以如果你能给出建议而不给出非常好的答案,那么谢谢你。)
编辑:添加BigInteger以供参考。我得到的错误是它无法将1转换为BigInteger。
public static BigInteger jackpotChance(int k, int highestNumber, int m)
{
BigInteger temp = 1;
BigInteger tempK = 1;
for(int i = 0; i < k; i++)
{
temp = temp * (highestNumber-i);
System.out.println(temp);
}
for(int u = 0; u < k; u++)
{
tempK = tempK * (k-u);
System.out.println(tempK);
}
BigDecimal jackpotChance;
jackpotChance = (temp/tempK)*m;
return jackpotChance;
}
答案 0 :(得分:1)
你为什么不为临时和节奏使用双打?那样可以解决你的问题。
答案 1 :(得分:0)
使用大数字,我认为如果你不使用小数,最好的选择是使用BigInteger
。
它有一个特殊的BigInteger#multiply
方法可以解决您的问题。
不要忘记BigInteger
对象是不可变的,因此在对它执行操作时,不要忘记将其值赋给变量。
BigInteger big = new BigInteger("10");
big = big.multiply(new BigInteger("20")); // value of big = 200;