c语言的求n的阶乘的程序代码

 我来答
南非乌雀
2018-03-30 · TA获得超过4.9万个赞
知道小有建树答主
回答量:62
采纳率:100%
帮助的人:1.6万
展开全部

用递归法求N的阶乘

程序调用自身称为递归( recursion).它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解.

递归的能力在于用有限的语句来定义对象的无限集合。

一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

long factorial(int n)

{

if(n == 1)

return 1;

else

return n*factorial(n-1);

}

int main(int argc,char *argv[])

{

int n = 0;

if(argc != 2)

{

printf("input error,exit!!\n");

return -1;

}

n = atoi(argv[1]);

printf("%d! = %ld\n",n,factorial(n));

return 0;

}

习题示例

题目

题目描述:  

输入一个正整数N,输出N的阶乘。  

输入:  

正整数N(0<=N<=1000)  

输出:  

输入可能包括多组数据,对于每一组输入数据,输出N的阶乘  

样例输入:  

4  

5  

15  

样例输出:  

24  

120  

1307674368000 

AC代码

#include <stdio.h> 

#include <stdlib.h> 

#include <string.h> 

#define MAX 3000 

//存储每次阶乘运算的结果 

int str[MAX]; 

void calculateFactorial(int n); 

int main() 

int n; 

while (scanf("%d", &n) != EOF) { 

if(n == 0) { 

printf("1\n"); 

} else { 

calculateFactorial(n); 

return 0; 

void calculateFactorial(int n) 

int i, j, temp, c, len; 

memset(str, 0, sizeof(str)); 

str[1] = 1; 

for (i = 2, len = 1; i <= n; i ++) { //循环与2,3,..n相乘 

for (j = 1, c = 0; j <= len; j ++) { //str数组代表一个数,模拟与i相乘 

temp = str[j] * i + c; 

str[j] = temp % 10; 

c = temp / 10; 

while(c > 0) 

str[j ++] = c % 10; 

c /= 10; 

len = j - 1; 

for (i = len; i >= 1; i --) { 

printf("%d", str[i]); 

printf("\n"); 

/************************************************************** 

Problem: 1076 

User: wangzhengyi 

Language: C 

Result: Accepted 

Time:2150 ms 

Memory:916 kb 

sharkyurui
推荐于2018-02-16 · TA获得超过150个赞
知道答主
回答量:121
采纳率:0%
帮助的人:60.7万
展开全部
int f(int n)
{
if(n==1)
return 1;
else
return n*f(n-1);
}
这个是经典的迭代程序例子。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晁以qy
2012-05-10 · TA获得超过223个赞
知道小有建树答主
回答量:187
采纳率:0%
帮助的人:93.2万
展开全部
#include<stdio.h>
main()
{
int n,i,j=1,sum=0;
printf("请输入n的值:\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
j=j*i;
}
printf("%d!=%d\n",n,j);

}
电脑验证过,放心用吧!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
木琼玥4
2011-06-19 · TA获得超过299个赞
知道答主
回答量:79
采纳率:0%
帮助的人:46.7万
展开全部
main()
{int n;cout<<"输入要求的阶乘:";
cin>>n;
for(int i=n;n>=1;n--)
long int M=1;
M*=n;
cout<<n<<"的阶乘为:"<<M<<endl;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cidplp
2011-06-18 · TA获得超过135个赞
知道答主
回答量:83
采纳率:0%
帮助的人:73.7万
展开全部
#include<stdio.h>

void main()
{
int i,n,temp=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
temp=temp*i;
}
printf("%d\n",temp);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(11)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式