B-3 有多少零
给定 n 个正整数,请你数数它们的乘积的末尾有多少个零。例如 26、225、48 的乘积是 280800,末尾有 2 个零。
输入格式:
输入给出一个不超过 10^6 的正整数 n,下一行给出 n 个不超过 10^6 的正整数。
输出格式:
在一行中输出给定的 n 个正整数的乘积末尾零的个数。
输入样例:
17
10 18 11 12 14 3 4 5 6 13 7 8 9 15 16 2 17
输出样例:
3
思考
题目给的数字个数很大,数字也非常大,所以直接将所有数字相乘,不断mod10是行不通的。
若干个数相乘,取决于能构成多少个10,而10又是由2*5组成,所以只需要统计原数列各个数的因数中,有多少个2和5,两者最小值就是乘积末尾0的个数。
代码
#include <iostream>
using namespace std;
int main() {
int n, temp, mod5 = 0, mod2 = 0;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> temp;
while (temp % 5 == 0) {
temp /= 5;
mod5++;
}
while (temp % 2 == 0) {
temp /= 2;
mod2++;
};
}
cout << min(mod2, mod5);
return 0;
}
标签:极简,正整数,1188,temp,10,int,PAT,末尾,乘积
From: https://blog.csdn.net/moqikong6/article/details/139633796