已退役


私信TA

用户名:15893197790

访问量:13453

签 名:

努力学习,积极生活。

等  级
排  名 382
经  验 4981
参赛次数 0
文章发表 43
年  龄 0
在职情况 学生
学  校 南京大学
专  业 计算机科学与技术

  自我简介:

已退役。研究生方向为AI+软件工程,欢迎学术交流!

TA的其他文章

解题思路:就二分就行了,ans满足:ans/5+ans/25+ans/125+ans/625+...=k。这里的除的结果都是向下取整,求最小的满足这个等式的数即可。

注意事项:这一题不要开O2优化,因为它会把mid=l+(r-l)/2变成mid=(l+r)/2,造成越界变为负数



参考代码:

#include<bits/stdc++.h>//

using namespace std;

typedef long long ll;

ll k;

ll check(ll x){//返回x的阶乘中的末尾0的个数 

    ll ret=0; 

while(x){

ret+=x/5;

x/=5;

}

return ret;

}

ll ErFen(ll l,ll r){

while(l<r){

ll mid=l+(r-l)/2;//l<=mid<r

if(check(mid)>=k){

r=mid;

}

else if(check(mid)<k){

l=mid+1;

}

}

}

int main(){

scanf("%lld",&k);

ll ans=ErFen(0LL,LONG_LONG_MAX);

if(check(ans)==k){

printf("%lld",ans);

}

else printf("-1");

return 0;


 

0.0分

6 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

二分了时间复杂度还o1
2023-08-13 20:58:40
你第二个函数连 return都没有 ,也不知道怎么运行的!!!
2023-03-07 22:23:01
.......
2022-12-26 17:33:26
  • «
  • 1
  • »