nyoj 28 大数阶乘

来源:互联网 发布:java 隐式参数 编辑:程序博客网 时间:2024/05/16 05:32

题目来源:http://acm.nyist.net/JudgeOnline/problem.php?pid=28

用运算符重载,以及滚动数组来解的。

#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int MAXN = 5010;struct BigInt{    int l;    int s[MAXN<<2];}c[2];BigInt operator *(BigInt a, int b){    int i;    for(i = a.l; i < (MAXN<<2); ++i)        a.s[i] = 0;    for(i = 0; i < a.l; ++i)        a.s[i] *= b;    for(i = 0; i < a.l; ++i)    {        a.s[i+1] += a.s[i]/10;        a.s[i] %= 10;    }    while(a.s[a.l] != 0)    {        a.s[a.l+1] = a.s[a.l]/10;        a.s[a.l] %= 10;        a.l++;    }    return a;}void Print(BigInt a){    int i;    for(i = a.l-1; i >= 0; --i)        printf("%d", a.s[i]);    printf("\n");}int main(){    int m;    while(~scanf("%d", &m))    {        int i;        c[0].l = 1, c[0].s[0] = 1;        for(i = 1; i <= m; ++i)            c[i%2] = c[(i+1)%2] * i;        Print(c[m%2]);    }    return 0;}



0 0