题意:给你一个10进制数n 计算n的阶乘转化为16进制后中有多少个0
思路:先吧n转化为16进制 然后按照16进制的进位进行高精度乘法
ACcode:
#include<bits/stdc++.h>
using namespace std;
#define mmax 10010
#define new 16
struct Bignum
{
int Sz;
int num[mmax];
Bignum(int sz,int *a)
{
Sz=sz;
for(int i=0;i<Sz;i++)
num[i]=a[i];
}
Bignum(int x)
{
Sz=0;
while(x)
{
num[Sz++]=x%new;
x/=new;
}
}
Bignum operator * (const Bignum &a)
{
int tmp[mmax];
memset(tmp,0,sizeof tmp);
for(int i=0;i<Sz;i++)
for(int j=0;j<a.Sz;j++)
{
tmp[i+j]+=num[i]*a.num[j];
}
for(int i=0;i<Sz+a.Sz;i++)
{
tmp[i+1]+=tmp[i]/new;
tmp[i]%=new;
}
for(int i=Sz+a.Sz-1;i>=0;i--)
{
if(tmp[i])
return Bignum(i+1,tmp);
}
return Bignum(1,tmp);
}
};
int num[110];
int main()
{
Bignum ans(1);
for(int i=1;i<=100;i++)
{
ans=ans*Bignum(i);
int cnt=0;
for(int i=0;i<ans.Sz;i++)
{
if(ans.num[i]==0)
cnt++;
}
num[i]=cnt;
}
int n;
while(scanf("%d",&n)!=EOF)
{
if( n < 0) break;
printf("%d\n",num[n]);
}
return 0;
}