1. 程式人生 > >杭電oj-1042-N!

杭電oj-1042-N!

Problem Description
Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!


Input
One N in one line, process to the end of file.



Output
For each N, output N! in one line.



Sample Input
1
2
3


Sample Output
1

2

6

題目的意思是讓你求輸入的數的階乘,題目雖然很簡單,但是由於資料太大,開個10005的陣列預處理每一個數組的預處理明顯不行,所以這道題用大數相乘依次求階乘

我的思想:開個足夠大的陣列,每一個數組存一個各位數,代表階乘的每一位數,我們知道15*20的值就等於10*20+20*5的值,所以我們可以給陣列為下標為0的賦值為5,下標為1的賦值為1,分別乘以20,然後取餘,進位。

程式碼如下:

#include <stdio.h>
#include <string.h>

int a[50005];
int k;
int main()
{
    int t,i,j;
    while(scanf("%d",&t)!=EOF)
    {
        memset(a,0,sizeof(a));
        if(t==0||t==1)
            printf("1\n");
        else
        {
            k=1;
            a[0]=1;
            int jishu=0;
            for(i=2;i<=t;i++)
            {


                for(j=0;j<k;j++)
                {
                    a[j]=i*a[j]+jishu%10;
                    jishu=a[j]/10+jishu/10;
                    a[j]=a[j]%10;
                }
                while(jishu!=0)
                {
                    a[j++]=jishu%10;
                    jishu/=10;
                    k++;
                }
            }
            for(i=k-1;i>=0;i--)
                printf("%d",a[i]);
            printf("\n");
        }
    }
    return 0;
}