文章

11

粉丝

27

获赞

19

访问

1.2k

头像
上交2018 Problem A 情景模拟
P1626 上海交通大学2018年机试题
发布于2025年1月17日 20:11
阅读数 145

#include<bits/stdc++.h>
using namespace std; 
  
// 
//寻找n!中质因子5的个数,用for循环还是太慢,超时
//换个思路,含有质因子5的数一定是5的倍数,
//质因子有一个5的数是5的倍数, 质因子有两个5的数是25的倍数 (当然了是25的倍数的数也是5的倍数) 
//但是同样的如果是25的倍数,数里面就包含两个质因子5,现在把从1到n这n个数看作n个参赛者 
//第一轮除以5,(消耗掉每个参赛者手中一个5)  
//第二轮除以25,此时只有一个质因子5的数就无法参赛了, 消耗掉质因子5个数大于1的参赛者手中的一个5 
// 第三轮除以125...(以此类推,但要保证5^k<=n)
//累加每一轮参赛者的个数,就是这n个参赛者手中一共有的5的个数 、

//下面注释掉的代码是用 for循环的方法,超时 
//void findzhi(int *a,int n){
//	while(n%2==0){
//		a[2]++;
//		n=n/2;
//	}
//	while(n%5==0){
//		a[5]++;
//		n=n/5;
//	}
//}

int main(){
	int k,ans;
	int n;
	while(cin>>n){
//		memset(a,0,sizeof(a));
//		a=0;b=0;
//		for( i=2;i<=n;i++){
//			k=i;
//			while(k%2==0){
//				a++;
//				k=k/2;
//			}
//			while(k%5==0){
//				b++;
//				k=k/5;
//			}
//		}
//		int ans=0;
//		while(a*b!=0) {
//			ans++;
//			a--;
//			b--;
//		}
//		cout<<ans<<endl;
		k=5;
		ans=0;
		while(n/k!=0){
			ans=ans+n/k;
			k=k*5;
		}
		cout<&...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发