UVA【160】 Factorials大數階乘

題目:
Factorials
時間限制: 1 Sec 內存限制: 128 MB
提交: 32 解決: 11
[提交] [狀態] [討論版] [命題人:201805050140]
題目描述
N的階乘寫作N!表示小於等於N的所有正整數的乘積。階乘會很快的變大,如13!就必須用32位整數類型來存儲,70!即使用浮點數也存不下了。你的任務是找到階乘最後面的非零位。舉個例子,5!=12345=120所以5!的最後面的非零位是2,7!=1234567=5040,所以最後面的非零位是4。

輸入

共一行,一個整數不大於4,220的整數N。

輸出

共一行,輸出N!最後面的非零位。

樣例輸入

7

樣例輸出

4
題意:
找到階乘最後面的非零位上的數字;
就是大數求階乘最後用一個循環找出最後非零位上的數字;
Accept Code:

#include <stdio.h>
#include <string.h>
int f[52000]; 
int main()
{
    int i,j,k,n,m,count,temp;
    while(scanf("%d", &n)==1)
    {
        memset(f,0,sizeof(f));
        f[0]=1;
        count=1;
        for(i=1; i<=n; i++)
        {
            k=0;
            for(j=0; j<count; j++)
            {
                temp=f[j]*i+k;
                f[j]=temp%10;
                k=temp/10;
            }
            while(k>0)
            {
                f[count++]=k%10;
                k/=10;
            }
        }
        while(f[count]==0) count--;
        int t=0;
        while(f[t]==0) t++;
        printf("%d\n", f[t]);
    }
    return 0;
 } 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章