程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Leetcode_Factorial Trailing Zeroes(耗時問題)

Leetcode_Factorial Trailing Zeroes(耗時問題)

編輯:C++入門知識

Leetcode_Factorial Trailing Zeroes(耗時問題)


出現0的情況是,出現5和2的倍數。

[n/k]代表1~n中能被k整除的個數,而能被2整除的個數多余能被5整除的個數,故只要知道能被5整除的個數即可。那麼怎樣計算n!的質因子中所有5的個數呢?一個簡單的方法是計算floor(n/5)。例如,7!有一個5,10!有兩個5。除此之外,還有一件事情要考慮。諸如25,125之類的數字有不止一個5。例如,如果我們考慮28!,我們得到一個額外的5,並且0的總數變成了6。處理這個問題也很簡單,首先對n÷5,移除所有的單個5,然後÷25,移除額外的5,以此類推。

n!後綴0的個數 = n!質因子中5的個數
= floor(n/5) + floor(n/25) + floor(n/125) + ....

 

class Solution {
	/*
	因此只要計數5的個數就可以了。那麼怎樣計算n!的質因子中所有5的個數呢?
	一個簡單的方法是計算floor(n/5)。例如,7!有一個5,10!有兩個5。
	除此之外,還有一件事情要考慮。諸如25,125之類的數字有不止一個5。
	例如,如果我們考慮28!,我們得到一個額外的5,並且0的總數變成了6。
	處理這個問題也很簡單,首先對n÷5,移除所有的單個5,然後÷25,移除額外的5,以此類推。
	下面是歸納出的計算後綴0的公式。
	n!後綴0的個數 = n!質因子中5的個數
              = floor(n/5) + floor(n/25) + floor(n/125) + ....
	*/
public:
    int trailingZeroes(int n) {
        int count=0;
		int i=5;
		while(i<=n)
		{
			count+=n/i;
			i*=5;
		}
		return count;
    }
};//Time Limit Exceeded  比如輸入2147483647
而另外一種:

 

 

class Solution {
public:
    int trailingZeroes(int n) {
        int ret = 0;
        while(n)
        {
            ret += n/5;
            n /= 5;
        }
        return ret;
    }
};//OK
另種程序的思路是一致的,其中一個,是數據不斷增大,當數據很大的時候,會造成耗時很長;另一個是數據不斷減小,沒有出現類似的問題。


 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved