题目描述
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;
}