求1000阶乘的结果中0的个数和结果的位数(利用数组)

来源:互联网 发布:nba新浪体育数据库 编辑:程序博客网 时间:2024/05/14 05:34
  1. #include <stdio.h>
  2. void CountZero2(int n) 
  3.     //数组保存结果,存储顺序为各位,十位,百位, ……
  4.     int a[3000]={1}; 
  5.     int wei=0;  //保存当前计算结果的位
  6.     int jinwei = 0;//保存低位的进位
  7.     int w = 0;      //保存当前位与i的乘积
  8.     for (int i=2;i<=n;i++) 
  9.     { 
  10.         jinwei=0; 
  11.         for (int j=0;j<=wei;j++) 
  12.         {   
  13.             w=a[j]*i+jinwei;     
  14.             a[j]=w%10; 
  15.             jinwei=w/10; 
  16.         } 
  17.         while(jinwei) //最后一位(i-1!)与i乘积的结果的位数
  18.         { 
  19.             wei++; 
  20.             a[wei]=jinwei%10; 
  21.             jinwei/=10; 
  22.         } 
  23.     } 
  24.     printf("%d%s%d/n",n,"!中结果位数为:",wei+1); 
  25.     
  26.         int sum=0; 
  27.     for (int k=wei;k>=0;k--)  //打印出结果
  28.     { 
  29.         printf("%d",a[k]); 
  30.         if(a[k]==0)sum=sum+1; 
  31.     } 
  32.     printf("/n"); 
  33.     printf("%d%s%d/n",n,"!中共有0的个数为:",sum); 
  34. }
  35. int main()
  36. {
  37.     int i = 1000;
  38.     CountZero2(i);
  39.     return 0;
  40.         
  41. }
原创粉丝点击