思路:
乙個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 ...