时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 难度:普及- 分数:100?OI排行榜得分:12(0.1*分数+2*难度) 出题人:zsh
描述:n的阶乘定义为n!=n?(n?1)?(n?2)?...?1。 n的双阶乘定义为n!!=n?(n?2)?(n?4)?...?2或n!!=n?(n?2)?(n?4)?...?1,取决于n的奇偶性。 但是阶乘的增长速度太快了,所以我们现在只想知道n!和n!!末尾的0的个数。
输入描述:一个正整数n,?n?≤?107
输出描述:两个整数,?分别为n!和n!!末尾0的个数。
用例输入 1?
10
用例输出 1?
2 1
用例输入 2?
5
用例输出 2?
1 0
代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
long long n,s=0,i,k;//定义长整型变量n,s为0,i,k
cin>>n;//输入n
for(i=5;i<=n;i+=5){//由5到n以下最大的5的倍数循环,每次+5
k=i;//定义k的值为i,因为后面要用k进行运算
while(k%5==0){//用while循环求k当中5的个数,计入s
s++;
k/=5;
}
}
cout<<s<<" ";//输出s和空格
s=0;//将s清零
if(n%2!=0)//若n为偶数,直接输出0
cout<<0;
else{//n为奇数
for(i=10;i<=n;i+=10){//由10到n以下最大的10的倍数循环,每次+10
k=i;//定义k的值为i,因为后面要用k进行运算
while(k%5==0){//用while循环求k当中5的个数,计入s
s++;
k/=5;
}
}
cout<<s;//输出s
}
return 0;
}
|