阶乘函数后 K 个零(java 算法)
阶乘函数后 K 个零
f(x) 是 x! 末尾是 0 的数量。回想一下 x! = 1 * 2 * 3 * … * x,且 0! = 1 。
例如, f(3) = 0 ,因为 3! = 6 的末尾没有 0 ;而 f(11) = 2 ,因为 11!= 39916800 末端有 2 个 0 。
给定 k,找出返回能满足 f(x) = k 的非负整数 x 的数量。
示例 1:
输入:k = 0
输出:5
解释:0!, 1!, 2!, 3!, 和 4! 均符合 k = 0 的条件。
示例 2:
输入:k = 5
输出:0
解释:没有匹配到这样的 x!,符合 k = 5 的条件。
示例 3:
输入: k = 3
输出: 5
我感觉这题需要的是数学逻辑,只要思维正确很简单
解题思路:
按照数据规律求解
阶乘
1个5 ->5 1
2个5 = 25 6 实际相当于 5个1个5,然后再加25自身是两个5,所以得到的是 5+1 = 6
3个5 = 125 31 相当于5个25,然后加自身125又多了一个5 所以的(5+1)*5+1=31
按照这个规律,则后续公式可以f(2)=f(1)*5+1 f(1)=1 则 f(x+1) = f(x)*5+1 x是5的次幂数
public class Main76 { public static void main(String[] args) { int k = 5;//这是测试用例 int s = preimageSizeFZF(k); System.out.println(s);; } private static int preimageSizeFZF(int k) { int qian = 1; while(qian < k){ qian = qian*5 + 1; } while(qian > 1){ if (qian - 1 == k){ return 0; } qian = (qian-1)/5; k%=qian; } return 5; } }