求n的阶乘很简单:
#include<stdio.h>
int Fact(int n)
{
int c;
if (n == 0)
return 1;
else
c = n * Fact(n - 1);
return c;
}
/*或者直接这样:
int Fact(int n){
if(n==0) return 1;
else return n*Fact(n-1);
}
*/
int main()
{
int n;
printf("请输入n的值:");
scanf("%d", &n);
n = Fact(n);
printf("%d", n);
return 0;
}
稍加改动,变成求1到n的阶乘之和:
#include<stdio.h>
int Fact(int i)
{
if (i == 0)
return 1;
else
return i * Fact(i - 1);
}
int main()
{
int i, j, n, sum = 0;
printf("请输入n的值:");
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
j = Fact(i);
sum = j + sum;
}
printf("%d", sum);
return 0;
}
2022年6月14日更新:
- 新发现另外一种更加巧妙地计算阶乘的和的方法,在此记录:
被自己的智商蠢到了…
思路是提取公因子的方法:
例如:1!+ 2!+ 3!+ 4!= 1+(1 * 2)+(1 * 2 * 3)+(1 * 2 * 3 * 4)
提取公因子 1:=1 * { 1 + 2 +(2 * 3)+(2 * 3 * 4)}
再提取公因子 2:=1 * { 1 + 2 * [ 1 + 3 +( 3 * 4 )] }
再提取公因子 3:=1 * { 1 + 2 * [ 1 + 3 *( 1 + 4 )] }
最后一个式子的规律显而易见:
#include<stdio.h>
int main()
{
int num = 0;
int n = 100; //求 1 到 100 的所有的数的阶乘之和
do{
num = (num+1)*n;
n--;
}while(n>0);
printf("%d", num);
}