表达式末尾0的个数

题目
输入一个自然数n,求表达式 f(n) = 1!×2!×3!×…×n! 的结果末尾有几个连续的0?
输入描述:
自然数n
输出描述:
f(n)末尾连续的0的个数

思路:
这是一道找规律的题目,末尾中0的个数和5有关。
比如,11的阶乘,阶乘的元素中有5,10这两个关键性的数。至于元素5,可以随意和任意偶数配对,使得结果末尾有一个0,至于10,我们仅把他当做“5”看待,那么这个“5”也定能找到相应的偶数(偶数不必是阶乘中的元素,元素中的因子也可以)结合。那么末尾中又有一个0。因此11的阶乘结果,末尾有两个0。

但是如果我们简单地只考虑 n 中包含多少个5,那么是得不到正确答案的。因为有特殊的元素,这个元素仅看作一个“5”是不对的。比如:25,125,625…。25可以看做两个“5”,125可以看做3个“5”,以此类推。那么新的问题来了,怎么计算“5”的总个数?首先我们找出 n 对 5 的取整a1,再找 n 对 25 的取整 a2,再找 n 对 125 的取整 a3…然后将所有的a(i)累加即可。
详情看代码

public static void main(String[] args) {
		Scanner scanner= new Scanner(System.in);
		int n= scanner.nextInt();
		if (n<5) {    //若n小于5,直接输出0
			System.out.println(0);
		}else {
			int result =0;
			for (int i = 5; i <= n; i++) {
				for (int j = 5; j <=i; j++) {
					 result=count(result,j);//判断5的个数
				}
			}
			System.out.println(result);
		}
	}
	public static int count(int i,int j) {
		if (j % 5 == 0) {//如果j是5的整数倍
			i++;         //计数+1
			i=count(i, j/5);//递归调用判断j是否是5的幂次方倍
		}
		return i;
		
	}

文章转载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值