原題是這樣:
給定乙個整數n ,那麼n 的階乘n !末尾有多少個0呢?例如:n =10,n !=3 628 800,n !的末尾有兩個0。
初看這樣的題目可能會想到直接求出n!的階乘,然後再計算出0的個數。顯然用這種方法如果n很大的情況下,非常容易溢位。所以我們可以換個角度來分析這個問題。
n!=1×2×3×4×5×6×··· ×n
我們可以對n!進行
分解質因數即
n!=2x ×3y ×5z ··········
可以看到2和5相乘必然會產生乙個10,而這個10會在階乘的末尾新增乙個0。那麼問題就轉化為2x ×5z 可以產生多少個0,即min(x,z),顯然x肯定大於z(能被2整除的數肯定比5多),最終問題轉化為求z的值-即找出1...n能分解出多少個5, 程式如下:
intcountfactorialzero(intn)
}
returnret;
}
int countfactorialzero(int n) } return ret; }
求N的階乘所得的數字末尾含有多少個0
給定乙個整數n 那麼n 的階乘n 末尾有多少個0呢?例如 n 10,n 3 628 800,n 的末尾有兩個0。初看這樣的題目可能會想到直接求出n!的階乘,然後再計算出0的個數。顯然用這種方法如果n很大的情況下,非常容易溢位。所以我們可以換個角度來分析這個問題。階乘 n!1 2 3 4 5 6 n ...
求N!末尾所得數字0的個數
題目 給定乙個整數n 那麼n 的階乘n 末尾有多少個0呢?例如 n 10,n 3628800,所以n!末尾就有2個零。分析 如果直接先算出n 階乘,很容易導致記憶體溢位。顯然,直接算出來是不行的。所以,我們可以換乙個角度來分析這個問題。我們知道 n 1 2 3 4 n,所以,我們可以對n!進行分解質...
n的階乘末尾含0的個數
本博主曾被問過這樣乙個問題 求n的階乘中末尾含有多少個0。例如n 10,n 3628800,那麼n 末尾有兩個0。直接計算n 的值顯然不合適,因為n 數值太大,很容易溢位。而且這種無腦的計算方式,顯然不適合面試的時候裝nbility拿高薪offer。本博主當時被問這個問題的時候的第一反應就是 要相乘...