对任意输入的正整数N,编写C程序求N!的尾部连续0的个数。
上一篇 /
下一篇 2007-10-24 18:20:56
/ 个人分类:算法
//如:18!=6402373705728000,尾部连续0的个数是3。51Testing软件测试网5}xW,?1q1h$S7K.v].C
//问题直接的解法当然是直接求结果然后判断尾数0的个数。但是效率非常慢,是不是一定要有了结果才能知道
2V,f bH;pc
U0//结果有几个0呢,找一下规律就可以发现,尾数为0实际就是10的倍数,1个10可以分解为2*5就再不能分解了,51Testing软件测试网7nnb pnr
O|}
//所以要判断0的个数实际上是判断有几个2*5,问题就可以简单化了,针对这道题目,51Testing软件测试网:mG"kS*a_Q
//实际只要知道N!中有几个数是2*5的对就解决了。
#include "stdafx.h"51Testing软件测试网? a2Bp8M\s'J
#define Max 50
int FiveCount(int i)51Testing软件测试网sR LFi2["L
{
7K9U7mJ4t8X0 int j,sum = 0;51Testing软件测试网L aO/dhI6cS
j = i/5;51Testing软件测试网oC:E2T:y
pa!A
sum = 1;51Testing软件测试网T:V q[nc@
while(j%5==0){51Testing软件测试网m!pdVMV `G
j=j/5;51Testing软件测试网&q*dw~m7XA$R3q
sum++;
+]O&]@_*D0 }51Testing软件测试网A*I?Zxs7H o:T
return sum;51Testing软件测试网,Z1S!eP0a$?c
};
int TwoCount(int i)
8c'wq!S#k0{51Testing软件测试网x,c#o[h
int j,sum = 0;
st
ge3h0 j = i/2;51Testing软件测试网o.?2q
~H#riec
sum = 1;51Testing软件测试网3V8y`I&Q