2017.10.30
阿新 • • 發佈:2017-10-31
run nbsp ram math.h 題目 ace 等於 數字 計算
題目描述
輸入一個正整數n,求n!(即階乘)末尾有多少個0? 比如: n = 10; n! = 3628800,所以答案為2輸入描述:
輸入為一行,n(1 ≤ n ≤ 1000)
輸出描述:
輸出一個整數,即題目所求示例1
輸入
10
輸出
2解題思路就是把所有的數字進行分解質因數,例如: 6 = 2*3 15 = 3*5 64 = 2*2*2*2*2*2 = 2^6 100 = 2^2 * 5^2 576 = 2^6 * 3^2 那麽我們在計算n的階乘時,實際上就是把所有小於等於n的正整數分解成質因數,然後再將其乘到一起,那麽末尾0的個數實際上就是2*5的個數,而2的個數明顯是很多很多的,所以問題就轉化成了5的個數。 而只有5的倍數才有5這個因數,所以,問題就進一步簡化為小於等於n的數中有多少個數是5的倍數,當然25的倍數,125的倍數,625還要單獨考慮。
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <iomanip> //不能寫成#include <iomanip.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv)
{
int n;
int num;
int zero_num=0;
int temp;
scanf("%d",&n);
for(int k=1;k<n+1;k++)
{
temp=k;
num=0;
while((temp>=5)&&(temp%5==0))
{
num++;
temp=temp/5;
}
zero_num+=num;
}
cout<<zero_num<<endl;
return 0;
}
2017.10.30