Java 在计算阶乘时,我甚至使用long和double来获取垃圾值
我在这里发布的程序是一个问题,我 我知道这里已经讨论过了,我知道其中的逻辑 但是当我计算阶乘时,它甚至在计算29阶乘时溢出。我能做什么 不支持longJava 在计算阶乘时,我甚至使用long和double来获取垃圾值,java,long-integer,Java,Long Integer,我在这里发布的程序是一个问题,我 我知道这里已经讨论过了,我知道其中的逻辑 但是当我计算阶乘时,它甚至在计算29阶乘时溢出。我能做什么 不支持long package marbles_spoj; import java.util.Scanner; public class combinations_with_repetition { public static long calc(long n,long k) { System.out.println(
package marbles_spoj;
import java.util.Scanner;
public class combinations_with_repetition {
public static long calc(long n,long k)
{
System.out.println(n+" "+k);
long res=0;
res=factorial(n)/(factorial(k)*factorial(n-k));
return res;
}
static long factorial(long n)
{ long result=1;
if (n==1||n==0)return 1;
else
for(long i=2;i<n;i++)result=result*i;
//System.out.println("result is :"+result);
return result;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("Enter no. of marbles to b picked up");
long n=sc.nextLong();
System.out.println("enter no. of colors of marbles availables");
long r=sc.nextLong();
System.out.println("Number of combinations possible "+calc(n-1,r-1));
sc.close();
}
}
package marbles\u spoj;
导入java.util.Scanner;
公共类组合\u与\u重复{
公共静态长计算(长n,长k)
{
系统输出打印项次(n+“”+k);
长res=0;
res=阶乘(n)/(阶乘(k)*阶乘(n-k));
返回res;
}
静态长阶乘(长n)
{长结果=1;
如果(n==1 | | n==0)返回1;
其他的
对于(长i=2;i我们应使用来计算
但是您可能会使用大量的JVM
内存
例如:
public class FactorialUtil
{
public static BigInteger factorial(int n)
{
BigInteger ret = BigInteger.ONE;
for (int i = 1; i <= n; ++i) ret = ret.multiply(BigInteger.valueOf(i));
return ret;
}
}
公共类FactorialUtil
{
公共静态双整数阶乘(int n)
{
biginger ret=biginger.ONE;
对于(int i=1;i在我看来,double应该可以工作,并为您提供一个很好的近似值,但是您可以使用java.math中的biginger进行任意精度的数学运算,因此您总是可以得到精确的数字。简短而漂亮的答案(+1
)是的,我已经检查了您的演示,它工作正常(谢谢),但您能告诉我为什么“double”数据类型返回1.2164510040832E17(20的阶乘)尽管我已按如下方式初始化变量:double result=1;而不是double=1.0;首先,您的答案是19的阶乘,请检查您的代码是否存在错误/逻辑错误,或将其张贴在此处。第二:1.2164510040832E17使用e表示法。许多计算机程序/计算器在科学e中显示非常大和非常小的结果注释。例如,aEb相当于*10^b。检查:。希望这能解决您的疑问。请接受答案,因为它有助于将来访问此问题的所有人。