首页 > 编程知识 正文

java阶乘问题,用java求阶乘

时间:2024-03-07 18:23:22 阅读:331788 作者:MGXQ

本文目录一览:

java怎么写求阶乘?

亲测可用

long jiecheng(int x)

{

long int i,k=1;

for(i=1;i=x;i++)

k=k*i;

return k;

}

int main()

{

long int j,k=0;

int i;

for(i=1;i=20;i++)

{

j=jiecheng(i);

k+=j;

}

printf("%ldn",k);

}

输出的结果是2561327494111820313

扩展资料:

一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。

亦即n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。

计算方法:

大于等于1:

任何大于等于1 的自然数n 阶乘表示方法:n! = 1×2×3×...×(n-1)n或n! = n×(n-1)!

0的阶乘:0!=1。

参考资料:百度百科——阶乘

java 的阶乘问题

public static void main(String[] args){

pintResult();

}

public static void pintResult()

{

System.out.println("请输入要求阶乘的数: ");

Scanner str = new Scanner(System.in);

long a = str.nextLong();

long b =factorial(a);

System.out.println(a+"! = " + b);

pintResult();

}

public static long factorial(long n){

if((n == 1) || (n==0)){

return 1;

}else{

return n * factorial(n - 1 );

}

}

java输入一个数n,计算n的阶乘(5的阶乘=1*2*3*4*5)

1、首先要理解一下阶乘的公式:

n! =n*(n-1)*(n-2)*....*2*1,    5! = 5*4*3*2*1

#include           //头文件stdio.h在新浪博客中无法显示加上就可以了

int main()

{

int t=5,i=4;   //要是求其他的数的阶乘的话,把t的值改为其他数,

//再把i改为(t-1)就行了

while(i=1)

{

t=t*i;

i--;

}

printf("5的阶乘结果是:%dn",t);

return 0;

}

2、运行结果如下:

3、上面这种方法虽然能求出结果,但是不能求任意的数,也没有考虑到0!=1,这种情况,我们来改进一下;

#include                      // //头文件stdio.h在新浪博客中无法显示加上就可以了

int main()

{

int n,jc;

int jiecheng(int j);

printf("请输入任意一个整数n");

scanf("%d",n);

jc=jiecheng(n);

printf("该数的阶乘结果是:%dn",jc);

return 0;

}

int jiecheng(int j)

{

int i=j-1;

if(j==0 | j==1)  // 因为0的阶乘是1 ,1的阶乘也是1

j=1;

while(i1)       //

{

j=j*i;

i--;

}

return(j);

}

4、运行结果如下:

Java 求阶乘问题

12!=479001600 (4亿多)

13!=6227020800(62亿多)

而java 中int一般是32位的,表示的值的范围是-21亿多到+21亿多,因此从13 的阶乘开始,int型就表示不了了。long 的表示范围也有限。

java阶乘的算法是什么?

public class Factorial { public static int factorial(int x) { if (x 0) { throw new IllegalArgumentException(x must be=0); } int fact = 1; for (int i = 2; i = x; i++) { fact *= i; } return fact; } public static void main(String args[]) { System.out.print(factorial(10)); }}这个是利用递归算法制成的。public class factorial2 { public static int factorial2(int x) { if (x 0) { throw new IllegalArgumentException(x must be=0); } if (x = 1) { return 1; } else return x * factorial2(x - 1); } public static void main(String args[]) { System.out.print(factorial2(17)); }}这个是数组添加的方法制成的,可以计算更大的阶乘。public class Factorial3 { static long[] table = new long[21]; static {table[0] = 1; } static int last = 0; public static long factorial(int x) throws IllegalArgumentException { if (x = table.length) { throw new IllegalArgumentException(Overflow; x is too large.); } if (x = 0) { throw new IllegalArgumentException(x must be non-negative.); } while (last x) { table[last + 1] = table[last] * (last + 1); last++; } return table[x]; } public static void main(String[] args) { System.out.print(factorial(4)); }}最后一个是利用BigInteger类制成的,这里可以用更大的更大的阶乘。import java.math.BigInteger;import java.util.*;public class Factorial4{ protected static ArrayList table = new ArrayList(); static{ table.add(BigInteger.valueOf(1));} public static synchronized BigInteger factorial(int x){ for(int size=table.size();size=x;size++){ BigInteger lastfact= (BigInteger)table.get(size-1); BigInteger nextfact= lastfact.multiply(BigInteger.valueOf(size)); table.add(nextfact); } return (BigInteger) table.get(x); } public static void main(String[] args) { System.out.print(factorial(4)); } }其实方法还有很多,这里提供的也算是个框架形式。分享之

java阶乘问题?

像你这个要设置一个最小值。用if,

当它阶乘到了零的时候都应该停止运算。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。