- 总时间限制:
- 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; }