私は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(実際、分母) は(0.000である)10.00として私の22の階乗と分母のために正しい答えを与えることだと思います。 しかし、23の階乗と分母に間違った答えを与えます10.00
ヒント:製品内のゼロの数は、被乗数の素因数のリストにある「5」および「2」の数に関連しています。 –
全くありません。 11^5 = 161051. OPが彼が述べたように「0の数」に関心があるのか、あるいは「0のTRAILING数」を本当に望んでいるのかは明確ではない。彼のコードから、彼は2番目を望むように見えます。 – fjardon
おそらく[この関連の議論](http://stackoverflow.com/q/2847069/312172)は面白いです。 –