加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 02:41:22 所属栏目:大数据 来源:网络整理
导读:#includestdio.h#define N 1000#define M 3000void hmove(int arr[]){int i;for(i=M;i1;i--){arr[i]=arr[i-2];}arr[0]=0;arr[1]=0;}void move(int arr[]){int i;for(i=M;i0;i--){arr[i]=arr[i-1];}arr[0]=0;}void sum(int a[],int b[]){int i,c;int flag = 0
#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);
	
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读