91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++如何實現求N!中末尾0的個數

發布時間:2020-07-30 10:41:28 來源:億速云 閱讀:335 作者:小豬 欄目:開發技術

這篇文章主要講解了C++如何實現求N!中末尾0的個數,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

題目描述:

輸入一個正整數n,求n!(即階乘)末尾有多少個0? 比如: n = 10; n! = 3628800,所以答案為2

輸入描述:

輸入為1行,n(1≤n≤1000)

輸出描述:

輸出一個整數

樣例:

輸入:10

輸出:2

看到這個題,常規思路就是先把階乘算出來,再用算出來的結果求余,余數為0則個數加1,代碼如下:

#include<iostream>
using namespace std;
int main(void)
{
 int n, m = 1;
 cin >> n;
 for (int i = n; i > 0; i--)
 {
  m = m * i;
 }
 int sum = 0;
 int t;
 for (int i = 0; m > 0; i++)
 {
  t = m % 10;
  m = m / 10;
  if (t != 0) //要是0前面的數字不是0,則直接結束
  {
   cout << sum;
   return 0;
  }
  else
  {
   sum++;
  }
 }
 return 0;
}

注意一點,就是題目要求是算出末尾的0的個數,而不是整個數字中有多少0,所以要注意當余數不是0的時候就要結束代碼。

但是這樣做其實是不對的,因為我們注意到題目的輸入描述為n(1≤n≤1000),也就是說當n很大的時候,就會越界,超出int表示的范圍。所以也就不能用這種方法進行求解。

正確思路:我們先看一下末尾的0是怎么來的:末尾有0,就說明這個數可以被10整除,而再對10進行因數分解,不難看出10=5*2,而5乘以任何一個偶數,所得結果都會被10整除,所以問題就轉化為這個階乘里面含有多少個能被5整除的數字。當然還要注意一點,那就是25,125,625這三個數字,25本質上是2個5(平方),125本質上是3個5(立方),625本質上是4個5(4次方),所以在算到這些數字的時候要把他們本身含有的多的5算進去。

代碼如下:

#include<iostream>
using namespace std;
int main(void)
{
 int n,sum=0;
 cin>>n;
 while(n)
 {
  sum=sum+n/5;
  n=n/5;
 }
 cout<<sum;
 return 0;
}

看完上述內容,是不是對C++如何實現求N!中末尾0的個數有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

全州县| 南川市| 苍梧县| 九台市| 同仁县| 凤翔县| 澳门| 博湖县| 甘德县| 武宣县| 大厂| 定州市| 湖口县| 邯郸市| 九江县| 民丰县| 秦皇岛市| 祁东县| 永仁县| 苏尼特右旗| 平武县| 兴宁市| 洞口县| 定安县| 布尔津县| 洞头县| 南涧| 外汇| 中江县| 茌平县| 海城市| 五家渠市| 临夏市| 孟津县| 金昌市| 嘉峪关市| 双牌县| 正镶白旗| 吉隆县| 新昌县| 博湖县|