第一道题的flag

题目:计算:在0!, 1!, 2!, 3!, ..., (n-1)!, n!这些数中,有多少个数末尾有偶数个0。

Input

输入文件包含多组测试数据,并以“-1”结束。

每组数据只有一行,包含一个正整数n。

Output

对于每个测试数据,输出一行表示答案。
就这样,

我的错误代码:

#include
typedef long long lint;
lint n,ans,i,cnt;
lint dfs(lint len,lint y,lint z)
{
     if (len==0||y==0) return len;
//  if(y==1)return (len/10+len%10)*5+len%5;
     lint k1,k2,res=0;
     if (y%2==1)
     {
         k1=dfs(z,y-1,z/5);
         k2=z-k1;
         res=(( int )len/(2*z))*(k1+k2);
         if ((len%(2*z))>=z)
         {
             res+=k1;
             res+=len%z-dfs(len%z,y-1,z/5);
         } else
         res+=dfs(len%z,y-1,z/5);
     }
     else
     {
         k1=dfs(z,y-1,z/5);
         res=(( int )len/z)*k1;
         res+=dfs(len%z,y-1,z/5);
     }
     return res;
}
int main()
{
     while (~ scanf ( "%lld" ,&n))
     {
         if (n==-1) return 0;
         cnt=1;i=1;
         while (n/(i*5))
         {
             i*=5;
             cnt++;
         }
         ans=dfs(n+1,cnt-1,i);
//      =((n/10)+(n/5)%2)*5+(n-(int(n)/5)*5+1);
         
         printf ( "%lld\n" ,ans);
     }
}

好,开始找不同:

#include
typedef long long lint;
lint n,ans,i,cnt;
lint dfs(lint len,lint y,lint z)
{
     if (len==0||y==0) return len;
//  if(y==1)return (len/10+len%10)*5+len%5;
     lint k1,k2,res=0;
     if (y%2==1)
     {
         k1=dfs(z,y-1,z/5);
         k2=z-k1;
         res=((lint)len/(2*z))*(k1+k2);
         if ((len%(2*z))>=z)
         {
             res+=k1;
             res+=len%z-dfs(len%z,y-1,z/5);
         } else
         res+=dfs(len%z,y-1,z/5);
     }
     else
     {
         k1=dfs(z,y-1,z/5);
         res=((lint)len/z)*k1;
         res+=dfs(len%z,y-1,z/5);
     }
     return res;
}
int main()
{
//  freopen("in.txt","r",stdin);
     while (~ scanf ( "%lld" ,&n))
     {
         if (n==-1) return 0;
         cnt=1;i=1;
         while (n/(i*5))
         {
             i*=5;
             cnt++;
         }
         ans=dfs(n+1,cnt-1,i);
//      =((n/10)+(n/5)%2)*5+(n-(int(n)/5)*5+1);
         
         printf ( "%lld\n" ,ans);
     }
}

好吧,最后就是我在取整的时候没有用对数据类型

so我们可以得出一个结论就是:我在对明显处数据类型的选取上

是没有问题的,但往往会在不明显的地方选错数据类型

嗯,就这样,有相同问题的读者也注意一下吧

你可能感兴趣的:(小视野,算法,数学)