首页 > 代码库 > 魔法石的诱惑
魔法石的诱惑
题目描述:
修罗王远远地看见邪狼狂奔而来,问道:“慌慌张张的跑什么?”
邪狼大口大口的喘气:“我路过一家魔法石店,看到摆着那么多高阶魔法石,我就跑进去抢了一大袋。”
修罗王怒道:“光天化日,朗朗乾坤,众目睽睽之下,你也敢抢?”
邪狼:“我抢魔法石的时候,压根就没看见人,眼里只看见魔法石了”
修罗王:“……”
其实邪狼的贪婪很容易理解,因为高阶魔法石有一个特征,即它的重量进行阶乘运算后末尾有几个0,就拥有同等重量的普通魔法石几倍的魔法力。例如5!=5*4*3*2*1=120,而120结尾包含1个零,这意味着该魔法石拥有同等重量的魔法石 1 倍的魔法力。你的任务是找到最小自然数 N ,使 N!在十进制下包含 Q 个零。
输入格式:
一个数Q(0 <= Q <= 10^8 )。
输出格式:
如果无解,输出“No solution”,否则输出 N 。
输入示例:
2
输出示例:
10
#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<algorithm>using namespace std;inline int read(){ int x=0,f=1;char ch=getchar(); for(;!isdigit(ch);ch=getchar()) if( ch == ‘-‘ ) f=-1; for(;isdigit(ch);ch=getchar()) x=x*10+ch-‘0‘; return x*f;}const int maxx = 1000000000;int n, ans;int count(int num){ int count = 0; for(; num >= 5; num /= 5) count += num / 5; return count;}int main(){ n = read(); int left=1,right=1000000000,ans=500000001; while(left <= right) { int mid=(right+left) / 2 , cnt = count(mid); if(cnt == n && mid < ans) ans = mid; if(cnt > n){ right = mid - 1; } else if(cnt < n){ left = mid + 1; } else if(cnt == n){ right = mid - 1; } } if(ans == 500000001) puts("No solution"); else printf("%d\n",ans);}
魔法石的诱惑
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。