解题思路:通过数组存储 但不采用10进制 采用10万进制 可以减少进位处理和运算次数大大降低时间复杂度
此代码计算40000!也是秒出级别 此代码优化后更强大
注意事项:
参考代码:
#include<stdio.h> #include<string.h> #define C 100000 typedef long long ll; int main() { long int n;long int i,j,m; while(scanf("%ld",&n)!=EOF) { long long int a[n]; memset(a,0,sizeof(a)); a[0]=1; j=0;m=0; //初始化 do//计算阶乘 从 n 到 1 反计算 { for(i=j=0;i<=m;i++) j+=a[i]*n,a[i]=j%C,j/=C; j?a[++m]=j:0;//判断是否进位 }while(--n); //输出 printf("%ld",a[m]); while(m) printf("\n"); } return 0; }
0.0分
2 人评分
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:594 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:609 |
水仙花 (C语言代码)浏览:1053 |
C语言程序设计教程(第三版)课后习题9.10 (C语言代码)浏览:835 |
Tom数 (C语言代码)浏览:725 |
时间转换 (C语言代码)浏览:629 |
前10名 (C语言代码)浏览:727 |
孤独的骑士 (C语言代码)浏览:1371 |
C语言程序设计教程(第三版)课后习题6.7 (C语言代码)浏览:699 |
C语言程序设计教程(第三版)课后习题6.6 (C语言代码)浏览:553 |