用C++實(shí)現(xiàn)求N!中末尾0的個數(shù)的方法詳解
題目描述:
輸入一個正整數(shù)n,求n!(即階乘)末尾有多少個0? 比如: n = 10; n! = 3628800,所以答案為2
輸入描述:
輸入為1行,n(1≤n≤1000)
輸出描述:
輸出一個整數(shù)
樣例:
輸入:10
輸出:2
看到這個題,常規(guī)思路就是先把階乘算出來,再用算出來的結(jié)果求余,余數(shù)為0則個數(shù)加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前面的數(shù)字不是0,則直接結(jié)束
{
cout << sum;
return 0;
}
else
{
sum++;
}
}
return 0;
}
注意一點(diǎn),就是題目要求是算出末尾的0的個數(shù),而不是整個數(shù)字中有多少0,所以要注意當(dāng)余數(shù)不是0的時候就要結(jié)束代碼。
但是這樣做其實(shí)是不對的,因?yàn)槲覀冏⒁獾筋}目的輸入描述為n(1≤n≤1000),也就是說當(dāng)n很大的時候,就會越界,超出int表示的范圍。所以也就不能用這種方法進(jìn)行求解。
正確思路:我們先看一下末尾的0是怎么來的:末尾有0,就說明這個數(shù)可以被10整除,而再對10進(jìn)行因數(shù)分解,不難看出10=5*2,而5乘以任何一個偶數(shù),所得結(jié)果都會被10整除,所以問題就轉(zhuǎn)化為這個階乘里面含有多少個能被5整除的數(shù)字。當(dāng)然還要注意一點(diǎn),那就是25,125,625這三個數(shù)字,25本質(zhì)上是2個5(平方),125本質(zhì)上是3個5(立方),625本質(zhì)上是4個5(4次方),所以在算到這些數(shù)字的時候要把他們本身含有的多的5算進(jìn)去。
代碼如下:
#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;
}
到此這篇關(guān)于用C++實(shí)現(xiàn)求N!中末尾0的個數(shù)的方法詳解的文章就介紹到這了,更多相關(guān)C++實(shí)現(xiàn)求N!中末尾0的個數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C++使用異或運(yùn)算實(shí)現(xiàn)交換兩個數(shù)的值
- C++如何判斷一個數(shù)字是否為質(zhì)數(shù)
- C++使用遞歸和非遞歸算法實(shí)現(xiàn)的二叉樹葉子節(jié)點(diǎn)個數(shù)計(jì)算方法
- C++算法之在無序數(shù)組中選擇第k小個數(shù)的實(shí)現(xiàn)方法
- C++統(tǒng)計(jì)中英文大小寫字母、數(shù)字、空格及其他字符個數(shù)的方法
- C++求1到n中1出現(xiàn)的次數(shù)以及數(shù)的二進(jìn)制表示中1的個數(shù)
- c++統(tǒng)計(jì)文件中字符個數(shù)代碼匯總
- c++通過引用實(shí)現(xiàn)三個數(shù)字求最大值
- 利用C++的基本算法實(shí)現(xiàn)十個數(shù)排序
相關(guān)文章
Java中FilterInputStream和FilterOutputStream的用法詳解
這篇文章主要介紹了Java中FilterInputStream和FilterOutputStream的用法詳解,這兩個類分別用于封裝輸入和輸出流,需要的朋友可以參考下2016-06-06
Java ConcurrentModificationException異常解決案例詳解
這篇文章主要介紹了Java ConcurrentModificationException異常解決案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09
詳解Spring中Bean后置處理器(BeanPostProcessor)的使用
BeanPostProcessor 接口也被稱為Bean后置處理器,通過該接口可以自定義調(diào)用初始化前后執(zhí)行的操作方法。本文將詳細(xì)講講它的使用,需要的可以參考一下2022-06-06
java使用elasticsearch分組進(jìn)行聚合查詢過程解析
這篇文章主要介紹了java使用elasticsearch分組進(jìn)行聚合查詢過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02
java LocalDateTime加時間,計(jì)算兩個時間的差方式
文章介紹了如何在Java中使用LocalDateTime類添加時間并計(jì)算兩個時間的差值,通過比較來總結(jié)個人經(jīng)驗(yàn),并鼓勵讀者參考和支持腳本之家2025-03-03
SpringBoot中@MessageMapping注解的原理及使用詳解
這篇文章主要介紹了SpringBoot中@MessageMapping注解的原理及使用詳解,@MessageMapping注解是Spring Boot提供的一個重要的注解之一,它可以幫助我們處理WebSocket消息,需要的朋友可以參考下2023-07-07
Spring Boot應(yīng)用的極速部署腳本示例代碼
最近在工作中遇到了一個問題,需要極速的部署Spring Boot應(yīng)用,發(fā)現(xiàn)網(wǎng)上這方面的資料較少,所以自己來總結(jié)下,這篇文章主要給大家介紹了關(guān)于Spring Boot應(yīng)用的極速部署腳本的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-08-08

