2012-08-09 125 views
0

数量可能重复:
Counting trailing zeros of numbers resulted from factorialC++零的阶乘数

它给出的整数的 “p”。我必须找到一个数字“n”,其中“n factorial”在末尾有“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; 
    } 

} 
+2

为什么你不确定它是否正确?你究竟在哪里卡住? – 2012-08-09 18:49:43

+0

我做了测试,并没有问题。这是我家庭作业的一个问题,我的老师说这不是我的问题的解决方案。 – laura 2012-08-09 18:53:02

回答

0

这听起来像一个项目欧拉问题,所以我不会给一个明确的解决方案。这里有两点提示:

  • 您不必实际计算factorial以找出最终有多少个零。
  • 如果一个数字可以被2^N和5^N整除,那么该数字在末尾至少有N个零。