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