尾部的零 設計乙個演算法,計算出n階乘中尾部零的個數

2021-09-12 19:41:24 字數 631 閱讀 3980

思路:

乙個n的階乘未尾有多少個 0 取決於 1 到 n 的各個因子中 2 和 5 的個數,而2的個數是遠遠多於5的個數的,因此求出5的個數即可。

題解中給出的求解因子 5 的個數的方法是用 n 不斷除以 5, 直到結果為 0,然後把中間得到的結果累加. 例如, 100/5 = 20, 20/5 = 4, 4/5 = 0

則 1 到 100 中因子 5 的個數為 (20 + 4 + 0) = 24 個

即 100 的階乘末尾有 24 個 0. 其實不斷除以 5

是因為每個間隔 5 個數有乙個數可以被 5 整除,然後在這些可以被 5 整除的數中,每間隔 5 個數又有乙個可以被 25 整除,故要再除一次,....直到結果為0,表示沒有能繼續被除 5 整數的數了:

static void main(string args)

console.readkey();

}private static long trailingzeros(long n)

return num;

}private static long trailingzerosa(long n)

}return count0;

}

設計乙個演算法,計算出n階乘中尾部零的個數

樣例 1 輸入 11 輸出 2 樣例解釋 11 39916800,結尾的0有2個。樣例 2 輸入 5 輸出 1 樣例解釋 5 120,結尾的0有1個。思想一 碰到這個問題可能首先想到的就是用乙個for迴圈得到n的階乘,然後在算出末尾有幾個零,這種思想只能在n的階乘在資料型別範圍內,才能正確。一旦n的...

lintCode 2 計算出n階乘中尾部零的個數

描述 樣例 1 輸入 11 輸出 2 樣例解釋 11 39916800,結尾的0有2個。樣例 2 輸入 5 輸出 1 樣例解釋 5 120,結尾的0有1個。將n!先算出來,再數 零 的個數。存在問題,不可取,階乘資料過大,會產生溢位,而且複雜度較高。為什麼要數5和2的個數?舉例 5 4 3 2 1 ...

如何精確計算出乙個演算法的CPU執行時間

在程式中嵌入彙編語句,直接讀出cpu的機器週期。你需要多精確?gettickcount可以到18 20ms進度 timegettime可以到1ms精度 當然這些都不是c or c 標準支援的。那麼就要祭出最牛奔的方法,直接讀取cpu開機以來執行的機器週期數,一條彙編指令 rdtsc 就是 read ...