魔法石的诱惑
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了魔法石的诱惑相关的知识,希望对你有一定的参考价值。
题目描述:
修罗王远远地看见邪狼狂奔而来,问道:“慌慌张张的跑什么?”
邪狼大口大口的喘气:“我路过一家魔法石店,看到摆着那么多高阶魔法石,我就跑进去抢了一大袋。”
修罗王怒道:“光天化日,朗朗乾坤,众目睽睽之下,你也敢抢?”
邪狼:“我抢魔法石的时候,压根就没看见人,眼里只看见魔法石了”
修罗王:“……”
其实邪狼的贪婪很容易理解,因为高阶魔法石有一个特征,即它的重量进行阶乘运算后末尾有几个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); }
以上是关于魔法石的诱惑的主要内容,如果未能解决你的问题,请参考以下文章