九度OJ 1076:N的阶乘 题解

题目描述:

输入一个正整数N,输出N的阶乘。
输入:
正整数N(0<=N<=1000)
输出:
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
样例输入:
4
5
15
样例输出:
24
120
1307674368000
来源:
2006年清华大学计算机研究生机试真题

1000!约等于4*10的2567次方,因此用一个3000个元素的数组f保存。

<!-- lang: cpp -->
#include<stdio.h>
#include<string.h>
const int maxn = 3000;
int f[maxn];
int main()
{
    int i, j, n, len, num;
    while(scanf("%d", &n) != EOF)
    {
        len = 1;
        memset(f, 0, sizeof(f));
        f[0] = 1;
        int c = 0;                         //c表示进位
        for(i = 2; i <= n; i++)      //乘以i
        {
            for(j = 0; j < len; j++)
            {
                num = f[j]*i + c;
                f[j] = num % 10;
                c = num/10;
            }
            for(;c != 0; c /= 10)
            f[len++] = c%10;
        }
        for(j = maxn-1; j >= 0; j--)
            if(f[j]) break;
        for(i = j; i >= 0; i--)
            printf("%d", f[i]);
        printf("\n");
    }
    return 0;
}

你可能感兴趣的:(算法,N的阶乘,九度OJ)