C++求一堆数据乘积末尾有多少个0
时间: 2024-02-13 12:02:52 浏览: 132
n的阶乘末尾有多少个0_n的阶乘末尾的0_
5星 · 资源好评率100%
要计算一堆数据的乘积末尾有多少个0,需要先将这堆数据全部相乘,然后统计乘积末尾0的个数。
末尾0的个数取决于这堆数中因子5和因子2的个数,因为每个因子5和因子2相乘会得到一个10,而10就会在末尾产生一个0。因此我们只需要计算这堆数中因子5和因子2的个数,取它们中较小的那个就是乘积末尾0的个数。
具体实现时,我们可以遍历这堆数,对于每个数,不断将它除以5,直到无法整除为止,这样就能得到这个数中因子5的个数。同样地,不断将这个数除以2,直到无法整除为止,就能得到这个数中因子2的个数。最后将这堆数中所有数中因子5和因子2的个数累加起来,取两者中的较小值即为乘积末尾0的个数。
下面是示例代码:
```c++
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int cnt_2 = 0, cnt_5 = 0; // 分别记录因子2和因子5的个数
for (int i = 0; i < n; i++) {
int x;
cin >> x;
while (x % 2 == 0) { // 不断将x除以2,统计因子2的个数
cnt_2++;
x /= 2;
}
while (x % 5 == 0) { // 不断将x除以5,统计因子5的个数
cnt_5++;
x /= 5;
}
}
cout << min(cnt_2, cnt_5) << endl; // 取较小值即为乘积末尾0的个数
return 0;
}
```
这段代码的时间复杂度为 $O(n\log\max\{a_i\})$,其中 $n$ 表示数据个数,$\max\{a_i\}$ 表示这堆数据中的最大值。
阅读全文