題目:
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;
}