算法题 阶乘后的零
题目:
给定一个整数 n,返回 n! 结果尾数中零的数量。
示例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/factorial-trailing-zeroes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析:
这道题讲道理解出来不难,但是,万万没想到的是问题出在了溢出上,开始无脑用了int,结果数据溢出了。然后,抱着一丝侥幸心理,换成了long,然而依旧溢出,在这个时候想到了并不熟悉的BigInteger,由于并不熟悉只好找篇文章参照着来写,最终成品如下:
代码:
public int trailingZeroes(int n) { BigInteger res = BigInteger.ONE; for (int i = 1; i <= n; i++) { res = res.multiply(BigInteger.valueOf(i)); } int count = 0; while (true) { if (!((res.remainder(BigInteger.valueOf(10))).equals(BigInteger.ZERO))) { break; } res = res.divide(BigInteger.valueOf(10)); count += 1; } return count; }
在编译器里测试了一下,没什么问题,但是,在力扣提交的时候,显示cannot find symbol,我笑了... ...
然后,只好手动导入了一下,import java.math.BigInteger;