1. 程式人生 > >牛客:階乘結果換算進位制後得到數字的尾部有幾個0

牛客:階乘結果換算進位制後得到數字的尾部有幾個0

題目

用十進位制計算30!(30的階乘),將結果轉化成3進位制進行表示的話,該進位制下的結果末尾會有多少個0?

https://www.nowcoder.com/questionTerminal/14f881b32735445bb2af3494ce5f0e17?orderByHotValue=0&pos=29

連結:https://www.nowcoder.com/questionTerminal/14f881b32735445bb2af3494ce5f0e17?orderByHotValue=0&pos=29
來源:牛客網

 對於3進位制,3的質因數為3,將30!的每個因子分解成質因數的形式,末尾0的個數就是質因數的3的個數。我們只考慮3的倍數,3、6、12、15、21、24、30每個數貢獻1個3,9、18貢獻2個3,27貢獻個3,因此質因數3的個數為1*7+2*2+3*1=14個

連結:https://www.nowcoder.com/questionTerminal/14f881b32735445bb2af3494ce5f0e17?orderByHotValue=0&pos=29
來源:牛客網

計算N!下三進位制結果末尾有多少個0,其實就是計算三進制中的3被移位了多少次, 就像二進位制一樣,每乘以2就向左移一位,末尾補0,因此這道題只要將N!因式分解成3^m*other,m就是答案。 技巧性的解法就是m=N/3+N/(3^2)+N/(3^3)....+N(3^k) (k<=N/3), 用程式碼實現即為: sum=0; while(N){     sum+=N/3;
    N=N/3;
} return sum;