2009-01-17 21:06:55來源不明
ACM 623 500!
往大數的方向又邁進了一步!
/************************************************************/
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #include<math.h>
- int math[1001][2601]; /*設在裡面會爆炸*/
- main()
- {
- int a,b,n; /*建立表格*/
- math[0][0]=1;math[1][0]=1; /*起始值*/
- for(a=2;a<1001;a++)
- {
- for(b=0;b<2600;b++)
- { /*挖下面的陣列來乘*/
- math[a][b]=math[a][b]+math[a-1][b]*a;
- if (math[a][b]>=10)
- {
- math[a][b+1]=math[a][b+1]+math[a][b]/10;
- math[a][b]=math[a][b]%10;
- }
- }
- }
- while(scanf("%d",&n)==1)
- {
- printf("%d!\n",n);
- for(a=2599;a>=0;a--)
- {
- if(math[n][a]!=0)
- {
- for(b=a;b>=0;b--)
- printf("%d",math[n][b]);
- break;
- }
- }
- printf("\n");
- }
- return 0;
- }
/******************************萬進版本************************/
- #include<stdio.h>
- #include<stdlib.h>
- int math[1001][650];
- main()
- {
- int a,b,n;
- math[0][0]=1;math[1][0]=1;
- for(a=2;a<1001;a++)
- {
- for(b=0;b<650;b++)
- {
- math[a][b]=math[a][b]+math[a-1][b]*a;
- if (math[a][b]>=10000)
- {
- math[a][b+1]=math[a][b+1]+math[a][b]/10000;
- math[a][b]=math[a][b]%10000;
- }
- }
- }
- while(scanf("%d",&n)==1)
- {
- printf("%d!\n",n);
- for(a=649;a>=0;a--)
- {
- if(math[n][a]!=0)
- {
- printf("%d",math[n][a]);
- for(b=a-1;b>=0;b--)
- {
- if(math[n][b]<10000&&math[n][b]>=1000)
- printf("%d",math[n][b]);
- else if(math[n][b]<1000&&math[n][b]>=100)
- printf("0%d",math[n][b]);
- else if(math[n][b]<100&&math[n][b]>=10)
- printf("00%d",math[n][b]);
- else if(math[n][b]<10)
- printf("000%d",math[n][b]);
- }
- break;
- }
- }
- printf("\n");
- }
- return 0;
- }