本文主要是介绍EOJ 3022. 计算n!右端0的个数(II),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Time limit per test: 2.0 seconds
Memory limit: 256 megabytes
给定一个整数 N (1≤N≤1000),输出 N 阶乘右端 0 的个数。
Input
第 1 行:一个整数 T (1≤T≤10) 为问题数。
接下来共 T 行,每行一个整数,表示 N (1≤N≤1000)。
Output
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0:
等)。
然后对应每个问题在一行中输出 N 阶乘右端 0 的个数。
Examples
3 1 20 1000
case #0: 0 case #1: 4 case #2: 249
Note
- 1! 等于 1,右端0的个数 0 个
- 20! 等于 2432902008176640000,右端0的个数 4 个
- 1000! 等于 402387260077093773543702433923003985719…,右端0的个数 249 个
思路:计算结尾有多少个0,就是求n表示成(2^k)*(5^h)后,min(k,h)。而k和h肯定是k>h,由于在n!中2出现的次数很大。即求h的值即可
#include<stdio.h>
int T;
/*计算能被5整除的次数*/
void solve()
{int n;scanf("%d",&n);int ret=0;int m=5;while(n>=m){ret+=n/m;m*=5;}printf("%d\n",&n);
}
int main()
{scanf("%d",&T);for(int step=0;step<T;step++){printf("case #%d:\n",step);solve();}return 0;
}
这篇关于EOJ 3022. 计算n!右端0的个数(II)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!