我想用Cpp在阶乘中找到零的数目。问题是当我使用真正的大数字时。模数真的很长(fmod)
#include <stdio.h>
#include <math.h>
long zeroesInFact(long n)
{
long double fact=1;
long double denominator=10.00;
long double zero=0.0000;
long z=0;
printf("Strating loop with n %ld\n",n);
for(int i=2;i<=n;i++)
{
fact=fact*i;
printf("Looping with fact %LF\n",fact);
}
printf("Fmod %lf %d\n",fmod(fact,denominator),(fmod(fact,denominator)==zero));
while(fmod(fact,denominator)==zero)
{
fact=fact/10;
z++;
}
printf("Number of zeroes is %ld\n",z);
return z;
}
int main()
{
long n;
long x;
scanf("%ld",&n);
for(int i=0;i<n;i++)
{
scanf("%ld",&x);
printf("Calling func\n");
zeroesInFact(x);
}
return 0;
}
我觉得这里的问题是,
FMOD(事实上,分母) 让我对22个因子和分母正确答案为10.00(即0.000)。 但它给了我一个错误的答案因为23和分母10.00
提示:产品中零的数量与被乘数素数因子列表中的“5”和“2”的数量有关。 –
没有。 11^5 = 161051。目前尚不清楚OP是否对'零点数'感兴趣,因为他说过或他真的想要'TRAILING零点数'。从他的代码看起来他想要第二个。 – fjardon
也许[这个相关的讨论](http://stackoverflow.com/q/2847069/312172)对你很有意思。 –