#include <iostream>
#include <math.h>
#include<fstream>
#include<vector>
#include<ios.h>
#include<iterator>
#include<algorithm>
using namespace std;
/*计算一个整数的阶乘末尾数字“0”的个数
如5!=120 末尾"0"的个数为1
1!,2!,3!,4!末尾都没有"0"
5!末尾有一个"0"
且以后只再增加"0"只可能是乘以5的倍数的时候
如5!乘以6,7,8,9都不可能增加"0",乘以10时增加一个"0"
再乘以11,12,13,14时也不可能增加"0",在乘以15时增加一个"0"
...
*/
int comTotalZero(int input)
{
int count = 0;
int denominator = 5;
for(int i=5;i<=input;i+=5)
{
int tem = i;
while(0==tem%5)
{
tem/=denominator;
count++;
}
}
return count;
}
/*计算一个整数阶乘结果的位数
如10!= 3628800 结果为7位
由于log(1×2×3×4×...×1000)
=log1+log2+log3+log4+...+log1000
对于任一整数A,其阶乘结果的位数为sum满足:
sum = 1+log(1×2×3×4×...×A)
= 1+(log1+log2+log3+log4+...+logA)
*/
int comTotalCount(int input)
{
double sum = 0;
std::ofstream out ("d:\\sum.txt",ios::out);
for(double i=1;i<=input;i++)
{
sum +=log10(i);
out<<" i = "<<i<<" sum = "<<sum<<endl;
}
return (int)sum+1;
}
int main(int argc, char* argv[])
{
int i=10;
cout<<i<<"的阶乘中零的位数:"<<comTotalZero(i)<<endl; //输出249
cout<<i<<"的阶乘总的位数:"<<comTotalCount(i)<<endl; //输出2568
//cin.get();
return 0;
}