Java, C++, linux c, C#.net 技術(shù),軟件架構(gòu),領(lǐng)域建模,IT 項(xiàng)目管理 Dict.CN 在線詞典, 英語(yǔ)學(xué)習(xí), 在線翻譯
新浪博客:新浪 blog MSN: wbjeasygo@163.com Email: wbjeasygo@163.com QQ 精英群: 47763528 空間:QQ空間 淘寶店:新開(kāi)淘寶書(shū)店 致謝: 感謝雷老師幾年的指導(dǎo) 感謝導(dǎo)師在學(xué)業(yè)上的關(guān)懷, 感謝老婆的支持, 感謝我的同學(xué)和同事, 在我成長(zhǎng)的路上有你。
1. 給定一個(gè) N ,求出N!末尾有多少個(gè)零,比如 N=10,N!=3628800,N!末尾有兩個(gè)零。 2. 求N!的二進(jìn)制表示中最低為1的位置,比如 11010010, 最低為1的位置為2。
問(wèn)題一解法:
在上一個(gè) blog 中介紹的子數(shù)組乘積最大值的問(wèn)題中,有朋友考慮到溢出的問(wèn)題,在這個(gè)問(wèn)題中,我們從那些數(shù)相乘能得到10這個(gè)命題開(kāi)始思考。比如N!=K×10m那么N!后面就有m個(gè)零。這個(gè)問(wèn)題轉(zhuǎn)化為將N!進(jìn)行分解,如N!=2a×3b×5c 很顯然 10=2×5,那么零的個(gè)數(shù)m=min(a,c), 一個(gè)數(shù)能夠被2整除的機(jī)率比5要大很多因此 m=c,因此轉(zhuǎn)化為求 c的問(wèn)題,具體算法如:
問(wèn)題二解法:
我們都知道一個(gè)數(shù)除以2可以表示為 N>>1,即向右移動(dòng)一位。這個(gè)問(wèn)題轉(zhuǎn)化為求 N! 含有2的質(zhì)因數(shù)的個(gè)數(shù)問(wèn)題。
完整程序:
本博客為學(xué)習(xí)交流用,凡未注明引用的均為本人作品,轉(zhuǎn)載請(qǐng)注明出處,如有版權(quán)問(wèn)題請(qǐng)及時(shí)通知。由于博客時(shí)間倉(cāng)促,錯(cuò)誤之處敬請(qǐng)諒解,有任何意見(jiàn)可給我留言,愿共同學(xué)習(xí)進(jìn)步。
Powered by: BlogJava Copyright © Jack.Wang