2012年2月22日星期三
求N!的尾部连续0的个数
求解N!的尾部连续0的个数.
btw,N! 即阶乘表达式,1 * 2 * ... * N 的结果。不好意思是我啰嗦了哈。
以下描述不同解法。
一般解法,解法1,步骤:
a 求解N!阶乘的结果fac;
b 从fac末位开始,依次向前遍历直至非0。
__int64 Factorial(int n)
{
if(n<0)
return -1;// error
if(n<=1)
return 1;
//int f0=1, f1=1,
__int64 f2=1;
for(int i=2; i<=n; i++) //__int64
f2 *= i;
return f2;
}
int FactorialCount0Num_1(int n)
{
__int64 fac = Factorial(n);
int count =0;
while(fac%10==0)
{
count++;
fac /= 10;
}
return count;
}
较高效解法,解法2,步骤:
a 遍历[5, n]之间的数值,找出数值为5倍数。
b 累加计算这些数值除以5的结果。
int FactorialCount0Num_2(int n)
{
int count =0;
for (int i=5; i<=n; i+=5)
{
int j=i;
while (j%5==0&&j!=0)
{
count++;
j = j/5;
}
}
return count;
}
订阅:
博文评论 (Atom)
没有评论:
发表评论