題目描述
N的階乘寫作N!表示小於等於N的所有正整數的乘積。階乘會很快的變大,如13!就必須用32位整數類型來存儲,70!即使用浮點數也存不下了。你的任務是找到階乘最後面的非零位。舉個例子,5!=12345=120所以5!的最後面的非零位是2,7!=1234567=5040,所以最後面的非零位是4。
輸入
共一行,一個整數不大於4,220的整數N。
輸出
共一行,輸出N!最後面的非零位。
樣例輸入
7
樣例輸出
4
我用的是大數的相乘
#include<stdio.h>
#include<string.h>
int a[20000];
int main()
{
int i,n,len,j,flag;
while(~scanf("%d",&n))
{
len=1;
memset(a,0,sizeof(a));
a[0]=1;
for(i=1;i<=n;i++)
{
flag=0;
for(j=0;j<len;j++)
a[j]*=i;
for(j=0;j<len;j++)
{
if(a[j]>=10)
{
a[++j]+=a[j-1]/10;
a[j-1]=a[j-1]%10;
if(j>=len)
{
len++;
flag=1;
}
j--;
}
}
if(flag==0)
len=j;
}
for(i=0;i<len;i++)
{
if(a[i]!=0)
{
printf("%d\n",a[i]);
break;
}
}
}
return 0;
}