阶乘n!的结尾后面有多少个零

LeetCode - 阶乘后的零

思路:我们将 n! 进行质因数分解,使它由质数相乘得来,即 n ! = 2 x × 3 y × 5 z × 7 w × . . . n!=2^x \times 3^y \times 5^z \times 7^w \times ... n!=2x×3y×5z×7w×...,这样10只能由 2 × 5 2 \times 5 2×5产生,而2的个数要比5的个数多,因为从1开始数,每连续两个自然数就有一个2的倍数,可以提取一个2因子,而每连续五个自然数才有一个5的倍数,所以2的个数要比5的个数多得多。这样我们只要计算出z就可以。

要计算z很简单,看n!能分解出多少个5因子。先计算1~n中有多少个是5的倍数,显然有n/5个,我们从这些数中提取n/5个5因子。而25的倍数,同时也是5的倍数,可以提取两个5因子,有一个已经计算在n/5里面,所以我们再计算出1~n中有多少个是25的倍数,从中我们可以再提取n/25个5因子。125的倍数可以提取三个5因子,以此类推,最后 z = n / 5 + n / 5 2 + n / 5 3 + . . . z=n/5+n/5^2+n/5^3+... z=n/5+n/52+n/53+...

伪代码:

int count = 0;
while(n > 0){
    count += n/5;
    n /= 5;
}
好的,以下是一个简单的servlet代码来计算阶乘n!: ```java import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/FactorialServlet") public class FactorialServlet extends HttpServlet { private static final long serialVersionUID = 1L; public FactorialServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取输入的数字n int n = Integer.parseInt(request.getParameter("n")); // 计算阶乘 int factorial = 1; for (int i = 1; i <= n; i++) { factorial *= i; } // 输出结果 response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h2>" + n + "的阶乘是:" + factorial + "</h2>"); out.println("</body></html>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } ``` 在这个servlet中,我们首先获取输入的数字n,然后使用一个for循环计算n的阶乘,并将结果输出到浏览器中。我们可以通过以下方式在浏览器中访问这个servlet:`http://localhost:8080/你的应用程序名称/FactorialServlet?n=5`,其中“你的应用程序名称”是你的web应用程序的名称,而“n=5”表示计算5的阶乘
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值