站外题WA求助
  • 板块学术版
  • 楼主Ctjer
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/6/29 22:10
  • 上次更新2023/11/4 21:18:29
查看原帖
站外题WA求助
464170
Ctjer楼主2021/6/29 22:10

找到一个最小的 NN, 使得 1×2×3...×N1 \times 2 \times 3 ... \times N 的末尾恰好有 QQ00 输入 第一行输入一个整数 TT, 接下来 TT 行每行输入一个整数 QQ

T10000,1Q108T \le 10000, 1 \le Q \le 10^8

思路:二分

代码:

#include<bits/stdc++.h>
using namespace std;
int T;
int q;
inline int five_num(int n){
	int c=0;
	n/=5;
	while(n>0){
		c+=n;
		n/=5;
	}
	return c;
}
int main()
{
	scanf("%d",&T);
	int d=T;
	while(T--){
		scanf("%d",&q);
		bool f=false;
		int l=1,r=100000000;
		while(r-l>1){
			int mid=(l+r)/2;
//			cout << mid << endl;
			if(five_num(mid)==q){
				l=mid;
				f=true;
				break;
			}
			if(five_num(mid)<q){
				l=mid;
			}
			if(five_num(mid)>q){
				r=mid;
			}
		}
		if(f){
			printf("Case %d: %d\n",d-T,l-l%5);
		}
		else{
			printf("Case %d: impossible\n",d-T);
		}
	}
	return 0;
}
2021/6/29 22:10
加载中...