阶乘统计0个数 算法

来源:互联网 发布:乐1pro刷机包优化内核 编辑:程序博客网 时间:2024/06/05 02:46
#include<stdio.h>#include<stdlib.h>#include<string.h>void calculate(int a[] , const int num );  //计算每一步的阶乘int len = 1;int main(void){   int *a;   int n  = 0;      while(n>10000 ||n < 1000)   { printf("please input number n between 1000 and 10000: ");     scanf("%d",&n);   }      a = (int *)malloc(sizeof(int)*n*4);   if(a == NULL)   {     exit(-1);   }      memset(a,0,n);   a[0] = 1 ;   for(int i = 1 ; i <= n ; i++)  //通过数组计算n!   {         calculate(a , i ) ;   }          int count = 0;    while(a[count] == 0){    count++;}//统计个数零printf("the result is :  %d\n",count);      return 0;}void calculate(int a[]  , const int num ){      int result = 0;       // 乘积结果   int remainder = 0 ;   // 余数   int carry = 0;        // 进位   for(int i = 0 ; i < len ; ++i)   {         result =  a[i]*num + carry;      a[i] = result%10;   carry = result/10;   }   if(carry!=0)  //如果进位不为零,从低位到高位依次存储   {       while(carry/10 != 0)   {       a[len] = carry%10;   carry = carry/10;   len++;   }       a[len++] = carry;   }}

0 0