POJ NOI MATH-7657 连乘积末尾0的个数
- 总时间限制:
- 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;
}
 
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号