设计一个求整数 n的阶乘程序

要求:设计一个普通函(如取名为fac)数用来求n的阶乘,在main函数中通过输入语句输入整数n,然后调用fac函数求出n的阶乘,并输出结果.... 要求:设计一个普通函(如取名为fac)数用来求n的阶乘,在main函数 中通过输入语句输入整数n,然后调用fac函数求出n的阶乘,并输出结果. 展开
 我来答
wuchangqian
2009-11-11 · TA获得超过1317个赞
知道小有建树答主
回答量:913
采纳率:0%
帮助的人:784万
展开全部
如果 n! 很大. 请用:
//=============================================
//该程序的计算结果正确与否可以通过google计算器验证,但是google的阶乘运算目前(2009/08/04)只能到170!,该程序能运算10000以下整数的阶乘;

//通过分析该模拟算法知道:可以通过调大MOD_OF_ARY值提高计算效率,但是要保证MOD_OF_ARY 与MAX_NUM的积小于所在平台的有符号整形数最大值(即不至于溢出),与此同时printf函数调用中的格式输出宽度也要做相应的调整(即该有效输出位宽度数值上等于MOD_OF_ARY后面零的个数);并且MOD_OF_ARY不能小于MAX_NUM

http://www.google.cn/ig/calculator?hl=zh-CN&q=100!

#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 100
#define MOD_OF_ARY 10000

int main(){

static int ary[MAX_NUM] = { 1 };

int i, j;
int width; /*---表示结果的"宽度"---*/
int current_num; /*--- 当前数字 ---*/

/*--- 从大到小进行阶乘计算 ---*/
for( width = 0 , current_num = MAX_NUM ; current_num > 1; current_num-- ){

/*--- 对每一个‘分段’进行运算 ---*/
for( i = j = 0; i <= width; i++ ){

/*--- 当前运算的‘有效数值’ ---*/
ary[i] = ( (j += ary[i] * current_num) ) % MOD_OF_ARY;

/*--- 当前运算的‘进位数值’ ---*/
j /= MOD_OF_ARY;
}

if ( ary[i] = j ){ /*如果有进位,则索引向前推进*/
width++;
}
}

printf ( "%d", ary[width] );

/*--- 将求的数值输出 ---*/
for( j = width - 1; j >= 0; j-- ){

printf( "%04d", ary[j] );/*--- 这里的6跟MOD_OF_ARY的位数有关 ---*/
}

printf ("\n");
system ("pause");
}
lsx410725
推荐于2017-10-10 · TA获得超过1992个赞
知道小有建树答主
回答量:325
采纳率:0%
帮助的人:323万
展开全部
#include "stdio.h"
void main()
{
int i=0,a;
long temp=1;
printf("enter the number a:");
scanf("%d",&a);
if(a==0)
printf("0!=1");
else if(a<0)
printf("erron!please enter the number a again!");

else if(a>0)
{for(i=1;i<=a;i++)

temp*=i;

printf("%d!=""%ld\n",a,temp);}
return 0;
}

给你一个比较简单的求阶乘程序,具体可以到多少没有具体值,但是一定范围内还是很准确的,呵呵~,初学多多指教啊!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
w616141460
推荐于2017-09-16 · TA获得超过1596个赞
知道小有建树答主
回答量:490
采纳率:72%
帮助的人:78.9万
展开全部
  阶乘没有特别的公式可以求,只能按定义公式计算.
一般做题的时候,考试的时候,我们都用统一的计算器,上面有阶乘的键,自动出答案的.但不适用于大数的计算.但也有简便计算的方法,就是如果出现n!/(n-2)!就可以根据定义公式很快得到答案为n*(n-1).还有很多题也一样,需要从定义出发去推导,不一定要计算出n!就可以化简解题的.
而一般大数阶乘计算都是通过计算机编程计算的.这个程序是最基本、简单的程序之一
这里
ln(N!)=N×lnN -N或N!=1*2*3*.(N-2)*(N-1)*N
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cgiggle
2009-11-11 · TA获得超过1957个赞
知道大有可为答主
回答量:1996
采纳率:0%
帮助的人:1248万
展开全部
#include <stdio.h>
int fac(int n)
{
if(n==0||n==1)
return 1;
else
return n*fac(n-1);
}
main()
{
int n;
scanf("%d",&n);
printf("fac n is:%d",fac(n));
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式