POJ NOI MATH-7657 连乘积末尾0的个数

来源:互联网 发布:编程开发在哪里学 编辑:程序博客网 时间:2024/06/09 11:01
问题链接: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;}



1 0