求n!最后有多少位0
#include<stdio.h>
int main()
{
int T,n,ans;
scanf("%d",&T);
while(T--)
{
int ans=0;
scanf("%d",&n);
while(n)
{
ans+=n/5;
n/=5;
}
printf("%d\n",ans);
}
}
求n! 的用二进制表示,最后有多少位0
#include<stdio.h>
int main()
{
int T,n,ans;
scanf("%d",&T);
while(T--)
{
int ans=0;
scanf("%d",&n);
while(n)
{
ans+=n/2;
n/=2;
}
printf("%d\n",ans);
}
}
poj1150
#include<stdio.h>
int get(int x,int n)
{
if(n==0)
return 0;
else
return (n/x)+get(x,n/x);
}
int get1(int x,int n)
{
if(n==0)
return 0;
else
return (n/10)+(n%10>=x)+get1(x,n/5);
}
int get2(int x,int n)
{
if(n==0)
return 0;
else
return get2(x,n/2)+get1(x,n);
}
int t[4][4]={{6,2,4,8},{1,3,9,7},{1,7,9,3},{1,9,1,9}};
int main()
{
int res,n,m,n2,n3,n5,n7,n9;
while(~scanf("%d%d",&n,&m))
{
res=1;
n2=get(2,n)-get(2,n-m);
n5=get(5,n)-get(5,n-m);
n3=get2(3,n)-get2(3,n-m);
n7=get2(7,n)-get2(7,n-m);
n9=get2(9,n)-get2(9,n-m);
if(n5>n2)
{
printf("5\n");
continue;
}
if(n2!=n5)
{
res*=t[0][(n2-n5)%4];
}
res*=t[1][n3%4];
res*=t[2][n7%4];
res*=t[3][n9%4];
printf("%d\n",res%10);
}
}