1024!末尾有幾個零?

來源:互聯網
上載者:User

以前見過這題幾次,也不記得是哪裡的面試題了。

1024可計為N

解題方法有兩種:

一、使用大整數運算,也算是“暴力求解”了。但只看可能的求解長度就下一跳啊。此法不可取。

二、運用數學理論不難發現:

1、結果0的個數是和其小於N中各位為5的個數不無關係的。不是5的倍數無論和哪個相乘都不可能出現個位為0的結果。

N以內的偶數個數肯定是大於5倍數的個數的(5和偶數相乘才可能增加末位0的個數)。

所以有a = N / 5;

2、再看一下25這個是不是有點特殊呢?25 * 4 = 100,能產生兩個0,這是為什麼呢?因為25 = 5 * 5;因為能產生多餘0的個數是和包含因子5的個數相關的。

25 * 4 = 100,有兩個0,100無論在和任何非10倍數的數相乘都不可能產生多餘兩個0的數。同理(75 = 25 * 3 = 5 * 5 *3)* 4 = 300;(125 = 5 * 5 * 5 )* 8 = 1000;

即一個數包含多少個因子5其就可以同足夠的偶數相乘產生相同個數的末位0。

總結如下:N的階乘中末位0的個數為:N/5 + N/25 + N/125 ……

計算測試程式:

#include <stdio.h>int zero_count(int n);int main(int argc ,char *argv[]){printf("zero_count is %d...\n", zero_count(1024));return 0;}int zero_count(int n){int count = 0;while(n > 0) {n = n/5;count += n;}return count;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.