大数阶乘——————数组模拟

来源:互联网 发布:php授权码怎么做 编辑:程序博客网 时间:2024/05/21 20:28

突然发现大数阶乘还能用这么简单的数组模拟,但是感觉复杂度好像有点高,一次运算是n*MAXN的复杂度,虽然空间复杂度比较低。

#include<stdio.h>#include<string.h>const int MAXN = 50000;int main() {    int n;    scanf ( "%d", &n );    int f[MAXN];    memset ( f, 0, 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;}


0 0