大きいグループの合数の末尾のゼロの個数を知っていますか.
5724 ワード
/*問題説明:組合せ数C(n,m)=nを求める!/(((n-m)!)*m!)中末尾に何個のゼロがありますか.
入力:tは入力されたテストデータのグループ数を表し、各caseは1行n,mの2つの数を含み、ここで(1<=m<=n<=10^9)
SAMPLE INPUT: 3 5 1 5 2 100 1 SAMPLE OUTPUT: 0 1 2 */
入力:tは入力されたテストデータのグループ数を表し、各caseは1行n,mの2つの数を含み、ここで(1<=m<=n<=10^9)
SAMPLE INPUT: 3 5 1 5 2 100 1 SAMPLE OUTPUT: 0 1 2 */
- #include <stdio.h>
- #include <math.h>
-
- long count2(long);
- long count5(long);
-
- int main(int argc, char *agrv[])
- {
- int t;
- long n,m;
- long num2,num5;// 2 num2, 5 num5
- scanf("%d",&t);
- while(t--)
- {
- scanf("%d%d",&n,&m);
- num2=count2(n);
- num2-=count2(m);
- num2-=count2(n-m);
- num5=count5(n);
- num5-=count5(m);
- num5-=count5(n-m);
- if(0==num2||0==num5)
- {
- printf("0
");
- }
- else if(num2>=num5)
- {
- printf("%ld
",num5);
- }
- else
- {
- printf("%ld
",num2);
- }
- };
-
- }
- // n! 2
- long count2(long n)
- {
- double n1=log(n)/log(2);// , log2(n)
- long max=(long)n1;
- return max*(max-1)/2;
- }
- // n! 5
- // rangercyh count5
- long count5(long n)
- {
- long a=0;
- if(n>=5)
- {
- n/=5;
- a+=n;
- return a;
- }
- else
- {
- return 0;
- }
- }