#include<stdio.h> #include<string.h> int main(){ int Data[10001]; int digit; int i,j,r,k; int N; memset(Data,sizeof(Data)); Data[1]=1; digit=1; printf("Enter a number what you want to calculus:\n"); scanf("%d",&N); for(i=1;i<N+1;i++) { for(j=1;j<digit+1;j++) Data[j]*=i; for(j=1;j<digit+1;j++){ if(Data[j]>10){ for(r=j;r<digit+1;r++){ if(Data[digit]>9) digit++; Data[r+1]+=Data[r]/10; Data[r]=Data[r]%10; } } } } printf("%d",digit); return 0; }
32000 这个数还不能处理。 不知道 int 所能表示的最大数组为多少。
修改如下:
#include<stdio.h> #include<string.h> #include<time.h> static int Data[200001]; int main(){ clock_t start,finsh; double duration; start=clock(); int digit; int i,r; int N,M; scanf("%d",&M); while(M--){ memset(Data,sizeof(Data)); Data[1]=1; digit=1; scanf("%d",&N); for(i=1;i<N+1;i++) { for(j=1;j<digit+1;j++) Data[j]*=i; for(j=1;j<digit+1;j++){ if(Data[j]>10){ for(r=j;r<digit+1;r++){ if(Data[digit]>9) digit++; Data[r+1]+=Data[r]/10; Data[r]=Data[r]%10; } } } } printf("%d\n",digit); } finsh=clock(); duration=(double)(finsh-start)/CLOCKS_PER_SEC; printf("%f seconds\n",duration); return 0; }
论坛大神给的如下:
#include <stdio.h> #include <string.h> #include <malloc.h> int main(){ int *Data; int digit; int i,k; int N; Data=(int *)calloc(10000000,sizeof(int)); if (NULL==Data) { printf("Can not calloc 10000000 int!\n"); return 1; } Data[1]=1; digit=1; printf("Enter a number what you want to calculus:\n"); scanf("%d",&N); for (i=1;i<N+1;i++) { for (j=1;j<digit+1;j++) Data[j]*=i; for (j=1;j<digit+1;j++) { if (Data[j]>10) { for (r=j;r<digit+1;r++) { if (Data[digit]>9) digit++; Data[r+1]+=Data[r]/10; Data[r ] =Data[r]%10; } } } } printf("%d",digit); free(Data); return 0; }详细关于全局变量与局部变量区别,以及栈与堆链接如下http://blog.csdn.net/lavendermaple/article/details/8986096
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。