hdu 1124 Factorial(数论:推理)

来源:互联网 发布:中软数据库面试 编辑:程序博客网 时间:2024/06/04 17:46

求N!末尾有多少个0,首先想到0出现的条件,因为10的因子有(2,5) (1,10)

所以出现0,必须为5和一个偶数相乘或者10的整数倍和任意一个数相乘

而10的整数倍又可以看做5和一个偶数相乘的结果

因为一个数中偶数一定比5多,因此判断一个数中含有多少个5即可!

那么只是简单除以5对不对呢?不对!因为数目中可能含有5的阶乘,如25,125

所以要一直除以5直到小于5,而把这个过程中的商加起来,就是所含5的个数!

刚开始的想法就是模拟阶乘求解过程,判断每次相乘后是否为10的倍数,之后再取余数继续下一步

现在想想这样做肯定是错的,因为给出一个1000000000就超时了

代码如下:

#include <stdio.h>int main(void) {    int n, T, ans;    scanf("%d", &T);    while(T--) {        scanf("%d", &n);        ans = 0;        while(n) {        n /= 5;        ans += n;        }        printf("%d\n", ans);    }    return 0;}



0 0
原创粉丝点击