#include
__int64 factorial( __int64 n)
{
if( n == 1 )
return 1 ;
else
return n*factorial ( n-1 ) ;
}
void main()
{
__int64 factorial_sum = 0;
for(__int64 i = 1 ; i < 202 ; i++ )
factorial_sum += factorial( i ) ;
printf("The answer is :%I64d\n",factorial_sum);
}
运行结果如图
需要注意的是,1!+21!+31!+......+201!的结果大的惊人,已经不能用长整形来表示了,所以要用到64位整型数,即用64位来表示一个整数,其范围自己算吧
如有不足,欢迎指正!
求n!的递归函数:
int fac(int n)
{
int f;
if(n<0)
printf("n<0,data error!");
else if(n==0 || n=1)
f=1;
else
f=fac(n-1)*n;
return(f);
}
希望对你能够有所帮助,如果满意,请选满意回答~~
数太大了 根本不行,不信的话你求一下30的阶乘,会溢出的,没办法,用大整数运算吧
#include
#include
size_t factorial(size_t n);
size_t factorial_for_1(size_t n);
int main(int argc, char *argv[])
{
size_t n = 11;
if (argc != 0)
{
n = (size_t)atoi(argv[1]);
}
printf("%zd\n", n);
printf("%zd\n", factorial_for_1(n));
return 0;
}
size_t factorial_for_1(size_t n)
{
if (n % 10 != 1)
{
return 0;
}
else if (n == 1)
{
return 1;
}
return factorial(n) + factorial(n-10);
}
size_t factorial(size_t n)
{
if (n == 1)
{
return 1;
}
return factorial(n-1) * n;
}