2009-05-09 20:11:58來源不明

退休的福利

作法:大數
加速法:十億進位

第一個是十億進位
第二個是十進位

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

#include<stdio.h>
#include<stdlib.h>
#define N 35
main()
{
 int a,b,c,math[1001][40]={0};
 math[1][0]=1;
 for(a=2;a<1001;a++)
  {
    for(b=0;b<N;b++)
     {
      math[a][b]=math[a][b]+math[a-1][b]*2;   
       if(math[a][b]>=0)
       {
         math[a][b+1]=math[a][b+1]+math[a][b]/1000000000;
         math[a][b]%=1000000000;
       }
     }
  }
  for(a=2;a<1001;a++)
  {
    for(b=0;b<N;b++)
     math[a][b]=math[a][b]+math[a-1][b];
    for(b=0;b<N;b++)
     if(math[a][b]>=0)
       {
         math[a][b+1]=math[a][b+1]+math[a][b]/1000000000;
         math[a][b]%=1000000000;
       }
  }
 int n;
 while(scanf("%d",&n)!=EOF)
   {
     for(a=N-1;a>=0;a--)
        if(math[n][a]!=0)
          {
            printf("%d",math[n][a]);
            for(b=a-1;b>=0;b--)
             printf("%09d",math[n][b]);
             printf("\n");
             break;
          }
   }
 return 0;
}

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

#include<stdio.h>
#include<stdlib.h>
#define N 350
main()
{
 int a,b,c,math[1001][350]={0};
 math[1][0]=1;
 for(a=2;a<1001;a++)
  {
    for(b=0;b<N;b++)
     math[a][b]=math[a-1][b]*2;
    for(b=0;b<N;b++)
     if(math[a][b]>=0)
       {
         math[a][b+1]=math[a][b+1]+math[a][b]/10;
         math[a][b]%=10;
       }
  }
  for(a=2;a<1001;a++)
  {
    for(b=0;b<N;b++)
     math[a][b]=math[a][b]+math[a-1][b];
    for(b=0;b<N;b++)
     if(math[a][b]>=0)
       {
         math[a][b+1]=math[a][b+1]+math[a][b]/10;
         math[a][b]%=10;
       }
  }
 int n;
 while(scanf("%d",&n)!=EOF)
   {
     for(a=N-1;a>=0;a--)
      {
        if(math[n][a]!=0)
          {
            for(b=a;b>=0;b--)
             printf("%d",math[n][b]);
             printf("\n");
             break;
          }
      }
   }
 return 0;
}

上一篇:古代神祕文字

下一篇:轉了一大圈