- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
给定两个正整数a,b(a < b)。求连乘积:
a×(a+1)×(a+2)×...×(b-1)×b
的末尾有多少个0?
- 输入
- 一行,包括两个正整数a,b。a < b <= 10000
- 输出
- 一个整数,即连乘积末尾0的个数。
- 样例输入
-
11 56 - 样例输出
-
11 - 来源
- 《奥数典型题举一反三(小学五年级)》 (ISBN 978-7-5445-2882-5) 第三章 第三讲 习题4
问题分析
这是一个计算的问题,需要数一下5的倍数的个数,同时需要数一下2的倍数的个数,取它们的最小值作为计算结果。
例如124*125,其中2的倍数的个数是2,5的倍数的个数是3。
程序说明
(略)。
AC的C++语言程序:
#include <iostream>
using namespace std;
int main()
{
int a, b, ans2, ans5, d, x;
cin >> a >> b;
ans5 = 0;
ans2 = 0;
d = 5;
for(;;) {
if(b / d == 0)
break;
ans5 += b / d;
d *= 5;
}
d = 5;
for(;;) {
if((a - 1) / d == 0)
break;
ans5 -= (a - 1) / d;
d *= 5;
}
for(int i=a; i<=b; i++) {
x = i;
while((x & 1) == 0) {
ans2++;
x >>= 1;
}
if(ans2 >= ans5)
break;
}
cout << min(ans5, ans2) << endl;
return 0;
}