第一个:求N!结果中末尾0的个数问题。思路是末尾0的产生 5*偶数,阶乘中偶数的个数肯定比5多,所以求出阶乘中5的个数就可以求出末尾0的个数。
1 #include<stdio.h>
2
3 int main(void)
4 {
5 int num,count,i,j;
6 i = count = 0;
7 scanf("%d",&num);
8 for(i=5; i<=num; i++)
9 {
10 j=i;
11 while(j)
12 {
13 if(j % 5 == 0)
14 {
15 count++;
16 j /= 5;
17 }
18 else
19 break;
20 }
21 }
22 printf("%d
",count);
23 return 0;
24 }
第二个:N!中位数有多少个,主要是要记得数学公式,要不然要去累加也够呛的。
1 #include<stdio.h>
2 #include<math.h>
3 int main(void)
4 {
5 int i,num;
6 double result;
7 scanf("%d",&num);
8 result = 1.0;
9 //数学公式 log10(n!)=log10(1*2*3…*n)=log10(1)+log10(2)+…+log10(n)+1 为10!的位数
10 for(i=1; i<=num; i++)
11 {
12 result += log10(i);
13 }
14 printf("%d",(int)result);
15 return 0 ;
16 }