C语言编程求1 x2x3····Xn所得的数末尾有多少个零

  

参见大数的阶乘https://blog.51cto.com/14232799/2365277

  

此次的程序与大数阶乘相似,只改变了数组的输出顺序,以及添加了计数器用来数出末尾有多少个0。

  

首先定义调用函数到

  
 <代码> int成(int, int x [], int *长度)
  {
  整数n,临时,jw=0;//临时临时变量,jw为一次计算结果的进位
  (n=0;n & lt;=*长度;n + +)
  {
  temp=x [n] * k + jw;
  x [n]=temp % 10;
  jw=temp/10;
  }
  而(jw)
  {
  x [n]=jw % 10;//当有进位时存入进位
  jw=jw/10;
  n + +,//数组填充长度变化
  }
  *长度=n - 1;//计算次数变化
  返回0;
  } 
  

编辑主函数,定义各种需要的变量,常规操作逆序输出计算结果。
最后加上计数器即可。

  
 <代码> (i=2;我& lt;=m;我+ +)
  {
  为(x,我和p);//调用函数计算结果存入数组
  }
  (我=0;我& lt;=p;我+ +)//输出计算结果末尾0的个数
  {
  如果(x[我]==0)
  和+ +,//累加器
  }
  (我=0;我& lt;=p;我+ +)//输出结果
  printf (" % d”x[我]);
  printf (" \ n ");
  printf("末尾一共% d个0 \ n”,总和); 
  

完整源代码:

  
 <代码> # include
  # include
  
  int成(int, int x [], int *长度)
  {
  整数n,临时,jw=0;
  (n=0;n & lt;=*长度;n + +)
  {
  temp=x [n] * k + jw;
  x [n]=temp % 10;
  jw=temp/10;
  }
  而(jw)
  {
  x [n]=jw % 10;
  jw=jw/10;
  n + +;
  }
  *长度=n - 1;
  返回0;
  }
  
  int main ()
  {
  int x [100000];
  int i m;
  int和=0;
  int p=0;
  printf(“请输入要计算的阶乘数:\ n”);
  scanf (“% d”,和米);
  x [0]=1;
  (我=2;我& lt;=m;我+ +)
  {
  为(x,我和p);
  }
  (我=0;我& lt;=p;我+ +)
  {
  如果(x[我]==0)
  和+ +;
  }
  (我=0;我& lt;=p;我+ +)
  printf (" % d”x[我]);
  printf (" \ n ");
  printf("末尾一共% d个0 \ n”,金额);
  系统(“暂停”);
  返回0;
  } 

C语言编程求1 x2x3····Xn所得的数末尾有多少个零