Cpp를 사용하여 계승에서 0의 수를 찾고 싶습니다. 문제는 내가 정말로 큰 숫자를 사용할 때이다.정말 긴 숫자의 계수 (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의 계승와 분모에 대한 정확한 답을 준다라고 생각합니다. 그러나 그것은 나에게 숫자 정밀도로 첫 번째 교훈을 10.00
힌트 : 제품에서 제로의 수는'5's와 피승수의 주요 요인의 목록에'2's의 수와 관련이있다. –
전혀 아닙니다. 11^5 = 161051. OP가 그가 말한 "0의 수"에 관심이 있는지, 아니면 "TRAILING 0의 수"를 정말로 원한다면 명확하지 않다. 그의 코드에서 그는 두 번째를 원하는 것처럼 보입니다. – fjardon
[관련 토론] (http://stackoverflow.com/q/2847069/312172)이 흥미로울 수 있습니다. –