思路分析:用一个大数组保存阶乘结果,初始化其为0
然后数组索引从小到大开始,一次存储阶乘的个位,十位,。。。即f[0]存放个位,f[1]存放十位。。。
整体思路是采用模拟手算的过程,比如5的阶乘
算法过程如下
1*2=2;
2*3=6;
6*4=24
24*5=120
代码如下
#include<stdio.h>
2 #include<string.h> 3 int maxn=300; 4 int main() 5 { 6 7 int f[maxn]; 8 int i,j,n; 9 scanf("%d",&n); 10 memset(f,sizeof(f)); 11 f[0]=1; 12 for(i=2;i<=n;i++)//模拟手算过程 13 { 14 int c=0; 15 for(j=0;j<maxn;j++) 16 { 17 int s=f[j]*i+c; 18 f[j]=s%10; 19 c=s/10; 20 } 21 } 22 for(j=maxn-1;j>=0;j--)//因为数字按位数逆序存放,且f[0]初始化为0,所以检索到从数组尾部开始检索,检索到第一个不为0的数就是阶乘结果的最高位 23 { 24 if(f[j]) 25 break; 26 } 27 for(i=j;i>=0;i--) 28 printf("%d",f[i]); 29 printf("\n"); 30 return 0; 31 }更多阶乘相关知识,请点击 http://blog.csdn.net/yxnk/article/details/1665052
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。