本文目录一览:
- 1、java怎么写求阶乘?
- 2、java 的阶乘问题
- 3、java输入一个数n,计算n的阶乘(5的阶乘=1*2*3*4*5)
- 4、Java 求阶乘问题
- 5、java阶乘的算法是什么?
- 6、java阶乘问题?
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("%ld\n",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的阶乘结果是:%d\n",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("该数的阶乘结果是:%d\n",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,
当它阶乘到了零的时候都应该停止运算。