Posted on 2007-04-19 15:30
kk 閱讀(926)
評(píng)論(1) 編輯 收藏 引用 所屬分類:
Algorithm
終于悟到了。
首先,很容易想到的就是,求0的個(gè)數(shù),就是求5的個(gè)數(shù)(如果這個(gè)你都想不明白的話,那就。。。再好好想想吧,呵呵);
接下來(lái),如何求5的個(gè)數(shù)呢?如果遍歷一遍的話,那顯然是太慢了!因?yàn)檫@種計(jì)算題太有規(guī)律了!想了好久,終于想出來(lái)了:
Result = 0; // 最后的結(jié)果
while ( N >= 5 )
{
N /= 5;
Result += N;
}
// 結(jié)束了。
沒(méi)錯(cuò),就是這么簡(jiǎn)單!下面簡(jiǎn)單說(shuō)說(shuō)為什么這樣子做是對(duì)的(偶小試了一下,沒(méi)問(wèn)題,呵呵):
第一次除以5表示5的倍數(shù)的個(gè)數(shù),
第二次除以5表示5的平方的倍數(shù)的個(gè)數(shù),(顯然,5的平方暗含了兩個(gè)0)
。。。依此類推
最后當(dāng)N<5了,結(jié)束。
小小的驗(yàn)證一下:
26!
26/5 = 5, 5/5 = 1,那么最后0的個(gè)數(shù)就是6了。用Google算了一下,結(jié)果G大叔直接用有效數(shù)字表示了,@$%$%@$%。。。不過(guò)應(yīng)該是沒(méi)錯(cuò)了。恩。
Sigh,知道結(jié)果后才知道原來(lái)這么簡(jiǎn)單的阿,偶土了。