第一道题的flag

1 篇文章 0 订阅
1 篇文章 0 订阅

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

Input

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

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

Output

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

我的错误代码:

#include<stdio.h>
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<stdio.h>
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我们可以得出一个结论就是:我在对明显处数据类型的选取上

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值