C语言 求1!+2!+3!+… +n! , 其中n由键盘输入。

求助高手

n的值不能超过13,否则会因为数据溢出而导致结果错误。

#include <stdio.h>

int main()

{

long i,n,m,sum=0

scanf("%d",&n);

for(i=m=1;i<=n;i++);

{

m*=i;

sum+=m;

}

printf("%d\n",sum);

return 0;

}

例如:

#include <stdio.h>

/* 通过递归计算一个数的回阶乘 */

int factorial(int num)

{

if (num==1)

return 1;

else

return (num * factorial(num - 1));

}

int main()

{

int i,n;

long sum = 1;

scanf("%d",&n);

for (i = 2;i <= n;++i)

sum += factorial(i);

printf("%ld\n",sum);

return 0;

}

扩展资料:

由于正整数的阶乘是一种连乘运算,而0与任何实数相乘的结果都是0。所以用正整数阶乘的定义是无法推广或推导出0!=1的。即在连乘意义下无法解释“0!=1”。

通常我们所说的阶乘是定义在自然数范围里的(大多科学计算器只能计算 0~69 的阶乘),小数科学计算器没有阶乘功能,如 0.5!,0.65!,0.777!都是错误的。但是,有时候会将Gamma 函数定义为非整数的阶乘,因为当 x 是正整数 n 的时候,Gamma 函数的值是 n-1 的阶乘。

参考资料来源:百度百科-阶乘

温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-12-25
#include<stdio.h>
int main()
{
int n;
long temp=1;
long result=0;
int i=0;
printf("请输入N的值:");
scanf("%d",&n);
for (i = 1;i<=n;i++)
{
temp *= i ;
result += temp;
}
printf("结果是:%d\n",result);
return 0;
}
第2个回答  2008-12-25
精度计算——大数阶乘

语法:int result=factorial(int n);

参数:

n:
n 的阶乘

返回值:
阶乘结果的位数

注意:

本程序直接输出n!的结果,需要返回结果请保留long a[]

需要 math.h

源程序:

int factorial(int n)
{
long a[10000];
int i,j,l,c,m=0,w;

a[0]=1;
for(i=1;i<=n;i++)
{
c=0;
for(j=0;j<=m;j++)
{
a[j]=a[j]*i+c;
c=a[j]/10000;
a[j]=a[j]%10000;
}
if(c>0) {m++;a[m]=c;}
}

w=m*4+log10(a[m])+1;
printf("\n%ld",a[m]);
for(i=m-1;i>=0;i--) printf("%4.4ld",a[i]);
return w;
}
第3个回答  2008-12-26
这是用c++写的,适当的改一下就可以了。
#include<iostream>
using namespace std;
long jc(long);
void main()
{
long n,sum=0;
cin>>n;
for(long i=1;i<=n;i++)
{
sum+=jc(i);
}
}
long jc(long x)
{
long s=1;
if(x==1||x==0)
return 1;
else
{
for(int j=1;j<=x;j++)
{
s*=j;
}
return s;
}
}本回答被提问者采纳
第4个回答  2008-12-25
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
double sum=0,temp;
int n,i,j;
printf("Please input N:\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
temp=1;
for(j=1;j<=i;j++)
temp*=j;
sum+=temp;
}/*计算1!+2!+…的值*/

for(i=1;i<n;i++)
printf("%d!+",i);
printf("%d=%.0lf",n,sum);/*输出*/
}
相似回答