阶乘算法
A. 阶乘的公式是什么
n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。
亦即n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。
资料来源:阶乘_网络
B. 阶乘计算
void fact(int n,int jc[])
{ int i,j,s;
int sum[300]={0}; //临时存储计算结果
sum[0]=1;
for(i=1;i<=n;i++)
{ for(j=1;j<300;j++)
sum[j]=ssum[j]*i;
for(j=1;j<299;j++) //十进制变换
if(sum[j]>9)
{ sum[j+1]=sum[j+1]+sum[j]/10;
sun[j]=sum[j]%10;
}
}
i=299;
while(sum[i]==0)
{ i--;}
s=i+1;//阶乘的位数
jc[0]=s; //返回计算结果
for(i=1;i<=s;i++)
jc[i]=sum[s-i];
}
//调用示例
main()
{ int n,i,s;
int jc[300]; //定义一个存储用的数组,注意数组元素个数不能过小,否则会溢出
printf("please input the num !");
scanf("%d",&n);
fact(n,jc);
s=jc[0];//取得阶乘位数
printf("%d的阶乘为\n",n);
for(i=s;i>=1;i--) //倒序打印
printf("%d",jc[i]);
}
C. 阶乘的程序和算法
没说要什么语言编写的,我给你一个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));
}
}
D. 阶乘计算
1-20%=0.8
1000+1000*0.8^1+。。。。。1000*0.8^n=1000(1+0.8^1+。。。。。0.8^n)
=1000[(1-0.8^(n+1))/1-0.8]=5000*(1-0.8^(n+1))
(等比数列的前n项和公式)
E. 简单阶乘计算
如何实现一个阶乘运算?
举例
输入:int n
比如n = 5, n = 8
输出:int x
n = 5,5的阶乘, 所以x = 120
n = 8,8的阶乘,所以x = 40320
题目介绍
阶乘问题是一个简单的数学问题,今天我们之所以提到这个问题是因为它和recursion之间有着不解之缘。有些同学可能能够迅速用recursion的方法做出这道题目,但是对recursion本身的了解并没有那么透彻。提到recursion,阶乘问题可以作为一个典型的例子,让大家能够由浅入深地了解recurion。这道阶乘运算是Microsoft的面试题之一,而跟recursion相关的题型也是大家在许多公司的面试中会遇见的。
今天希望大家忘掉这道题目的答案,跟我一起重新思考。阶乘是指用1乘以2乘以3乘以4,一直乘到所要求的数。例如所要求的数n = 5,则结果 x = 1 × 2 × 3 × 4 × 5,这里的乘积x就是n的阶乘。
分析题意
阶乘是指用1乘以2乘以3乘以4,一直乘到所要求的数。例如所要求的数n = 5,则结果 x = 1 × 2 × 3 × 4 × 5,这里的乘积x就是n的阶乘。
分析解题思路
了解了阶乘的定义以后,我们可以思考一个问题,我们想要知道n的阶乘,那么只需要知道n - 1的阶乘,我们想要知道n - 1的阶乘,那么只需要知道n - 2的阶乘,也就是说规模为n的问题,转化为了规模更小的问题。根据这个性质,我们应该自然而然的联想到recursion。
这里让我们一起回顾一下什么是recursion,在表象上recursion是直接或者间接调用自身函数的方法,而本质上是把一个大规模的问题变成比它小一个规模的问题。
既然如此,对于这道题目,我们可以试着用recursion的思想来解决。解决recursion的问题,我们第一步要想base case是什么,即最小规模的问题是什么, 这也是这个函数的终止条件,没有这个条件,我们所写的函数就会永无止境的运行下去。那么对于阶乘来说,当n <= 1的时候(在这里我们不考虑负数,0! = 1, 1! = 1),结果都是1,这就是它的最小规模问题。
第二步我们开始思考recursion rule,怎样把这个问题变成更小规模的问题。比如我们想解决n的阶乘,那么我们只要解决n - 1的阶乘,最后再用(n - 1)的阶乘乘以n就是我们想要的结果。
所以如果n = 5,那么5的阶乘和5 * factorial(4)的结果相同。
综合第一步和第二步,我们可以开始编写阶乘函数:
int factorial (int n) {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
在这个方法中我们需要注意返回的类型是int,所以它可以解决的阶乘数也是有范围的。
F. 阶乘怎么算啊
如果要精确计算阶乘,阶乘没有什么简便方法,只能一个一个的往下乘。
这也是为何要专门用一个!来表示阶乘。
如果只想计算大概的值,可以用“
斯特林公式”
(请自行网络)。
其实想想也很自然,
100!=1x2x3x...x10x11x12x...x20x21x...x99x100,
从10以后,每乘一次,这个数就至少增加一位,所以这个数就是写出来,也至少是100位左右的数字,假设有的话,这个公式该多复杂。