1000!结尾0数,多少位

#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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值