實現乙個整數N,其階乘N!末尾有多少個0?

2021-08-04 04:21:54 字數 625 閱讀 5539

給定乙個整數n,那麼n的階乘n!末尾有多少個0呢?

例如:n=10,n!=3 628 800,n!的末尾有兩個0。

也許很多人首先想的就是先求出其階乘,然後通過其階乘判斷末尾有多少個0…..我的第乙個想法也是如此;

以下是我對於這個思想的**實現:

void n_of_zero(int n)

printf("the sum is:%d\n",sum);

//通過階乘判斷末尾有多少個0

while(sum)

printf("the zero is:%d\n",count);

}

但是這個演算法感覺有點累贅,太麻煩了,那麼是否有更合理,更簡單的呢?思考了一下就有了以下思想:

10的倍數也就是2/5的倍數;而且2的倍數和5相乘都會產生0;那麼是不是只要計算出5的倍數的個數即可呢?

於是就有了下面的實現:

void n_of_zero1(int n)

}printf("the zero is:%d\n",count);

}

但是這個演算法的時間複雜度是不是比上乙個還大?我個人還是覺得第乙個比較好,雖然複雜,但是時間複雜度比起第二個演算法稍微好點;

給定乙個整數N,那麼N的階乘N!末尾有多少個0呢?

題目詳情 給定乙個整數n,那麼n的階乘n!末尾有多少個0呢?例如 n 10,n!3 628 800,n!的末尾有兩個0。題目分析 看到題第一想法是將n的階乘求出來然後取計算,但是再一想又會出現資料溢位的問題。所以就想到了另外一種辦法。因為 n!1 2 3 4 5 n 所以我們可以採用分解質因數來解決...

給定乙個整數N,那麼N的階乘N!末尾有多少個零呢?

題目 給定乙個整數n,那麼n的階乘n!末尾有多少個零呢?末尾有幾個零?如果我們從哪些數相乘可以的出10,這個角度來解決這個問題,這就會變成簡單。對質因數進行分解由於10 2 5,即每一對2和5就可以產生乙個10,如果我們求出n 中,2和5的分別的次方數,假設為x,z,取決於兩個數中最小的那個數,於是...

n 階乘末尾有多少個零0

題目 初階 1 2 3 100 求結果末尾有多少個零。高階 n的階乘末尾有多少個0 分析 一般類似的題目都會蘊含某種規律或簡便方法的階乘末尾乙個零表示乙個進製,則相當於乘以10而10 是由2 5所得,在1 100當中,可以產生10的有 0 2 4 5 6 8 結尾的數字,顯然2是確定的,因為4 6 ...