我知道如何计算阶乘的大O表示法,但是我很难将两种表示法组合在一起。 这是用于计算尾随零的代码。
using namespace std;
// Function to return trailing
// 0s in factorial of n
int findTrailingZeros(int n)
{
// Initialize result
int count = 0;
// Keep dividing n by powers of
// 5 and update count
for (int i = 5; n / i >= 1; i *= 5)
count += n / i;
return count;
}
// Driver Code
int main()
{
int n = 100;
cout << "Count of trailing 0s in " << 100
<< "! is " << findTrailingZeros(n);
return 0;
}
答案 0 :(得分:1)
复杂度为O(log(n))
。很容易看出是否绘制了每个n
的迭代次数:
n iterations
------ -----------
< 5 0
< 25 1
< 125 2
< 625 3
< 3125 4
答案 1 :(得分:0)
准确地说,应该是 O(1-log5(n))= O(log5(n))其中n是要确定阶乘的数字。
答案 2 :(得分:-1)
5,5^2,5^3....5^k。 最后 5^k<=n(在 for 循环中给出) 所以 k<=log5(n) 所以时间复杂度是 thetha(logn)