4-10 阶乘计算升级版
发布时间
阅读量:
阅读量
本题要求实现一个打印非负整数阶乘的函数。
函数接口定义:
void Print_Factorial ( const int N );
其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。
裁判测试程序样例:
#include <stdio.h>
void Print_Factorial ( const int N );
int main()
{
int N;
scanf("%d", &N);
Print_Factorial(N);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
15
输出样例:
1307674368000
本题输入数值最大为1000,在常规方式下(即变量定义为double)理论上能够计算出175!的结果。但当输入数值超出计算机精度范围时,则建议采用动态数组技术进行处理。其中数组元素用于存储每一位数字(即各个位上的数值),进位标志位用于记录进位情况,并标记当前处理的位置索引t。通过逆序拼接各元素值即可完成最终结果的输出。
void Print_Factorial ( const int N )
{int i=2,a[3000]={0},j,t=1,n=0;
if(N<0) printf("Invalid input");
else
{
a[0]=1;
for(;i<=N;i++)
for(j=0;j<t;j++)
{ int m;
m=a[j]*i+n; //该位的数字*i加上前一位的进位
a[j]=m%10; //结果的个位数在该位上
n=m/10; //结果的十位就是下一位的进位
if(j==t-1&&n) //如果处理到了最后目前最高位,且还有进位,位数加1
t++;
}
for(i=t-1;i>=0;i--)
printf("%d",a[i]);
}
}
全部评论 (0)
还没有任何评论哟~
