求后倒零

题目:求N!末尾有多少个零。


题目分析:一般先想到的是算出N!然后在对其求余,没错会爆,数据是以指数型增长。但是这个时候又可以想到,因为N!是十进制,所以每有一队 2,5就可以生一个零。所以我们只需要统计

2和5的个数然后取最小就可以得到后倒零。

  1 #include <iostream>
  2 #include <algorithm>
  3 using namespace std;
  4 typedef long long LL;
  5 int main(){
  6 	LL n;
  7 	cin >> n;
  8 	LL _2 = 0, _5 = 0;
  9 	for(LL i = 2; i <= n; ++ i){
 10 		LL t = i;
 11 		while(t % 5 == 0){
 12 			_5++;
 13 			t /= 5;
 14 		}
 15 		while(t % 2 == 0){
 16 			_2++;
 17 			t >>= 1;
 18 		}
 19 	}
 20 	cout << min(_2, _5) << endl;
 21 	return 0;
 22 }



另一样的题:

image

  1 #include <iostream>
  2 #include <algorithm>
  3 using namespace std;
  4 int main(){
  5 	int _2 = 0, _3 = 0;
  6 	int a;
  7 	int n;
  8 	cin >> n;
  9 	for(int i = 0; i < n; ++ i){
 10 		cin >> a;
 11 		int t = a;
 12 		while(t % 2 == 0){
 13 			t >>= 1;
 14 			_2 ++;
 15 		}
 16 		t = a;
 17 		while(t % 3 == 0){
 18 			t /= 3;
 19 			_3 ++;
 20 		}
 21 
 22 	}
 23 	cout << min(_2, _3) << endl;
 24 
 25 }
追求吾之所爱
原文地址:https://www.cnblogs.com/rstz/p/14391065.html