突然发现大数阶乘还能用这么简单的数组模拟,但是感觉复杂度好像有点高,一次运算是n*MAXN的复杂度,虽然空间复杂度比较低。
#include<stdio.h> #include<string.h> const int MAXN = 50000; int main() { int n; scanf ( "%d",&n ); int f[MAXN]; memset ( f,sizeof ( f ) ); f[0] = 1; for ( int i = 2; i <= n; i++ ) { //遍历2-n int c = 0; //记录进位 for ( int j = 0; j < MAXN; j++ ) { //f[]记录乘出来的结果f[0],f[1]分别记录个位十位的值 int s = f[j] * i + c; //暂存各个位的结果 f[j] = s % 10; c = s / 10; } } int i; for ( i = MAXN - 1; i >= 0; i-- ) //忽略前导零 if ( f[i] != 0 ) { break; } for ( int j = i; j >= 0; j-- ) { printf ( "%d",f[j] ); } printf ( "\n" ); return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。