用c语言求1000的阶乘中2的个数

#include<stdio.h>
#define N 1000
#define M 3000
void hmove(int arr[])
{
	int i;
	for(i=M;i>1;i--)
	{
		arr[i]=arr[i-2];
	}
	arr[0]=0;
	arr[1]=0;
}
void move(int arr[])
{
	int i;
	for(i=M;i>0;i--)
	{
		arr[i]=arr[i-1];
	}
	arr[0]=0;
}
void sum(int a[],int b[])
{
	int i,c;
	int flag = 0;
	for(i=0;i<M;i++)
	{
		c=a[i]+b[i]+flag;
		if(c>9)
		{
			a[i]=c%10;
			flag=c/10;
		}
		else
		{
			a[i]=c;
			flag=0;
		}
	}

}
void cheng(int arr[],int j)
{
	int i,flag=0,c;
	for(i=0;i<M;i++)
	{
		c=j*arr[i]+flag;
		if(c>9)
		{
			arr[i]=c%10;
			flag=c/10;
		}
	  else
		{
		   arr[i]=c;
		   flag=0;	
		}
	}
}
int main()
{
	int i=N,j,a[M],b[M],c[M];
	for(i=0;i<M;i++)   //初始化数组,使标记值都是-1  
    {  
        a[i]=0;     //存储全部 乘积以及个位乘积  
        b[i]=0;     //存储十位乘积  
        c[i]=0;  
    }
	a[0]=0;a[1]=0;a[2]=0;a[3]=1;
	b[0]=0;b[1]=0;b[2]=0;b[3]=1;
	c[0]=0;c[1]=0;c[2]=0;c[3]=1;
	int x,y,z,flag=0;
	for(i=999;i>0;i--)
	{
		if(i<100)
		{
			x=i%10;
			y=i/10;
			cheng(b,x);
			cheng(a,y);
			move(a);
			sum(a,b);
				for(j=0;j<M;j++)
	        { b[j]=a[j];}
		}
		else
		{
			x=i%10;
			z=i/100;
			y=(i-z*100)/10;
			cheng(b,y);
			move(a);			
			sum(a,b);
			cheng(c,z);
			hmove(c);
			sum(c,a);
				for(j=0;j<M;j++)
	         {
	         b[j]=c[j];
	         a[j]=c[j];
	     }
			
		}
		
        
			 
	}
	for(i=0;i<M;i++)         //循环数出2的个数  
        {if(a[i]==2)  
            flag++;
			} 
	 printf("有%d个2",flag);
	
}

相关文章

自1998年我国取消了福利分房的政策后,房地产市场迅速开展蓬...
文章目录获取数据查看数据结构获取数据下载数据可以直接通过...
网上商城系统MySql数据库设计
26个来源的气象数据获取代码
在进入21世纪以来,中国电信业告别了20世纪最后阶段的高速发...