24h購物| | PChome| 登入
2009-08-20 14:04:48| 人氣208| 回應0 | 上一篇 | 下一篇

Q10497: Sweet Child Makes Trouble (未完成)

推薦 0 收藏 0 轉貼0 訂閱站台

/*************************************************************/

#include<stdlib.h>     
#include<stdio.h>
int combination[240];
int GCD(int a,int b)                    
{                    
   int temp;                    
  while(a%b)                          
     {                          
       temp=a;                          
       a=b;                          
       b=temp%b;                                     
     }                    
   return b;                    
}
void Combination (int n,int m)
{
   int a,b,c; /*C  N取M*/
   int s[801]={0};
   for(a=0;a<240;a++)  {combination[a]=0;}
   for(a=0;a<=n;a++)  s[a]=a;
   combination[0]=1;
   if(m>n/2) m=n-m;
   for(a=2;a<=m;a++)
      {
         c=a;
         for(b=n-m+1;b<=n&&c!=1;b++)
            {
              int gg=GCD(s[b],c);

                  s[b]/=gg;
                  c/=gg;
            } 
      }
    for(a=n-m+1;a<=n;a++)
         {
         for(b=0;b<240;b++)
              combination[b]*=s[a];
         for(b=0;b<240;b++)
              {
              combination[b+1]+=(combination[b]/10);
              combination[b]%=10;
              }
         }  
/*        for(a=239;a>=0;a--)
           if(combination[a]!=0)
              {
                printf("%d\n",a);
                 for(;a>=0;a--)
                    printf("%c",combination[a]+48);
                 printf("\n");
                 break;
              }*/
    
}
int FF[801][2601]={0};
void F()
{
   int a,b,c;
   FF[0][0]=1;FF[1][0]=1;
   for(a=2;a<801;a++)
         for(b=0;b<2600;b++)
           {
              FF[a][b]=FF[a][b]+FF[a-1][b]*a;
              FF[a][b+1]=FF[a][b+1]+FF[a][b]/10;
              FF[a][b]%=10;
           }
}
main()
{
 int n;
 F();
 while(scanf("%d",&n)==1&&n!=-1)
     {
       int N[3000]={0};
       int a,b,c,d;
       for(a=n,c=0;a>=0;a--,c++)
          {
             int temp[3000]={0};
             Combination (n,c);
            for(b=0;b<239;b++)
                for(d=0;d<2600;d++)
                   {
                     temp[b+d]+=(combination[b]*FF[a][d]);
                     temp[b+d+1]+=(temp[b+d]/10);
                     temp[b+d]%=10;
                   }
                  
             if(c%2==0)
                   for(b=0;b<3000;b++)
                      N[b]+=temp[b];
             else
                   for(b=0;b<3000;b++)
                      N[b]-=temp[b];
          }      
       for(a=0;a<3000;a++)
          if(N[a]>=10)
             {
             N[a+1]+=(N[a]/10);
             N[a]%=10;
             }
          else if(N[a]<0)
               while(N[a]<0)
                  {
                    N[a]+=10;
                    N[a+1]--;
                  }
       for(a=1999;a>=0;a--)
           if(N[a]!=0)
              {
                 for(;a>=0;a--)
                    printf("%d",N[a]);
                 printf("\n");
                 break;
              }
     }
 return 0;
}

台長: 來源不明
人氣(208) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: *未完成的文章* |
此分類下一篇:ACM 10326 Q10326: The Polynomial Equation (未完成版)

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文