/*
目的:找出谁的阶乘正好末尾零的个数为Q
给出末尾0的个数范围<10^8
根据n!算0的个数公式
1.能够算出来上限是5 0000 0000
2.能够算出来n!0的个数与Q的关系,而且两者呈正相关,与二分法可挂钩
*/
#include<iostream>
#include<cstdlib>
using namespace
int solve(int n)
{
int ans=0;
while(n>0) //计算0的个数
{
// n/=5;
// ans+=n;
// 如果这么写,n/5=0后还得加一次0,不如写成下边,不符合就别计算了
ans=ans+n/5;
n/=5;
}
return ans;
}
void run()
{
int start=10,end=500000000;
int Q;
cin>>Q;
while(start<=end)
{
int mid=(start+end)>>1;
if(solve(mid)==Q)
{
cout<<mid<<endl;
exit(0);
}
else if(solve(mid)>Q)
{
end=mid-1;
}
else
{
start=mid+1;
}
}
printf("No solution\n")
}
int main()
{
run();
return 0;
}
阶乘0个数(分治算法实现)——暂未完成,二分细节不明
最新推荐文章于 2022-11-12 11:13:03 发布