0

可能重复:
计算因阶乘导致的数字尾随零

它被赋予一个整数“p”。我必须找到一个数字“n”,其中“n 阶乘”最后的“p”数字为零。这是我认为的解决方案,但我不确定它是否是解决此问题的方法。我是否必须创建一个函数来计算阶乘和另一个函数来获得零?

int p;
int count5=0;
int i;
int copy_i;

printf("Enter p: ");
scanf("%d",&p);

for(i=1; ;i++)
{
    copy_i=i;

    while(copy_i/5)
    {
        if(copy_i%5==0)
        {
            count5++;
            copy_i=copy_i/5;
        }
        else
        {
            break;
        }
    }

    if(count5==p)
    {
        printf("The minimum number n is: %d.",i);
        break;
    }
    else if(count5>p) 
    {
        printf("No match for n! with %d zero.",p);
        break;
    }

}
4

1 回答 1

0

这听起来像是一个 Project Euler 问题,所以我不会给出明确的解决方案。不过这里有两个提示:

  • 您不必实际计算阶乘来找出它最后有多少个零。
  • 如果一个数可以被 2^N 和 5^N 整除,则该数的末尾至少有 N 个零。
于 2012-08-09T18:52:14.270 回答