设计一个求整数 n的阶乘程序
要求:设计一个普通函(如取名为fac)数用来求n的阶乘,在main函数中通过输入语句输入整数n,然后调用fac函数求出n的阶乘,并输出结果....
要求:设计一个普通函(如取名为fac)数用来求n的阶乘,在main函数 中通过输入语句输入整数n,然后调用fac函数求出n的阶乘,并输出结果.
展开
4个回答
展开全部
如果 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");
}
//=============================================
//该程序的计算结果正确与否可以通过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");
}
展开全部
#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;
}
给你一个比较简单的求阶乘程序,具体可以到多少没有具体值,但是一定范围内还是很准确的,呵呵~,初学多多指教啊!
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;
}
给你一个比较简单的求阶乘程序,具体可以到多少没有具体值,但是一定范围内还是很准确的,呵呵~,初学多多指教啊!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
阶乘没有特别的公式可以求,只能按定义公式计算.
一般做题的时候,考试的时候,我们都用统一的计算器,上面有阶乘的键,自动出答案的.但不适用于大数的计算.但也有简便计算的方法,就是如果出现n!/(n-2)!就可以根据定义公式很快得到答案为n*(n-1).还有很多题也一样,需要从定义出发去推导,不一定要计算出n!就可以化简解题的.
而一般大数阶乘计算都是通过计算机编程计算的.这个程序是最基本、简单的程序之一
这里
ln(N!)=N×lnN -N或N!=1*2*3*.(N-2)*(N-1)*N
一般做题的时候,考试的时候,我们都用统一的计算器,上面有阶乘的键,自动出答案的.但不适用于大数的计算.但也有简便计算的方法,就是如果出现n!/(n-2)!就可以根据定义公式很快得到答案为n*(n-1).还有很多题也一样,需要从定义出发去推导,不一定要计算出n!就可以化简解题的.
而一般大数阶乘计算都是通过计算机编程计算的.这个程序是最基本、简单的程序之一
这里
ln(N!)=N×lnN -N或N!=1*2*3*.(N-2)*(N-1)*N
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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));
}
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));
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询