6-10 阶乘计算升级版 (20分)
本题要求实现一个打印非负整数阶乘的函数。
函数接口定义:
void Print_Factorial ( const int N );
其中N
是用户传入的参数,其值不超过1000。如果N
是非负整数,则该函数必须在一行中打印出N
!的值,否则打印“Invalid input”。
这题目乍一看不会,仔细想想也不会,没有思路。
经搜索发现了方法。 写的很好很仔细
问题只剩确定数组大小,百度1000的阶乘2700位大约。慷慨点,给它3000位。
学习了之后不急着看作者代码,先手撸一套,C语言的
void Print_Factorial ( const int N )
{
int i=1,To_N=1,a[3000]={1};//定义循环变量,并初始化数组
int pdt_i,extra=0; //定义i乘积,乘积的进位
if(N <0) {printf("Invalid input\n");return;}
while(To_N++ <N){
for(i=0;i<3000;i++){
pdt_i=a[i]*To_N+extra;
a[i]=pdt_i%10;
extra=pdt_i/10;
}
}