用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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |