zoukankan      html  css  js  c++  java
  • 卡特兰数高精度算法

    很多组合题都会用到卡特兰数,增长速度又很快,应该写个高精度尊敬一下~

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #define ML 549
     5 using namespace std;
     6 int kt[105][550];
     7 int len[105];
     8 int getlen(int ord)
     9 {
    10     int pos;
    11     for(int i=ML;i>=0;i--)
    12         if(kt[ord][i]!=0)
    13         {
    14             pos=i;
    15             break;
    16         }
    17     return pos+1;
    18 }
    19 void mut(int ord)
    20 {
    21     for(int i=0;i<len[ord-1];i++)
    22         kt[ord][i]=kt[ord-1][i]*(4*ord-2);
    23     for(int i=0;i<ML;i++)
    24         if(kt[ord][i]>9)
    25             kt[ord][i+1]+=kt[ord][i]/10,kt[ord][i]%=10;
    26     len[ord]=getlen(ord);
    27 }
    28 void div(int ord)
    29 {
    30     int k=ord+1;
    31     for(int i=len[ord]-1;i>=0;i--)
    32     {
    33         if(i!=0)
    34             kt[ord][i-1]+=(kt[ord][i]%k)*10;
    35         kt[ord][i]/=k;
    36     }
    37     len[ord]=getlen(ord);
    38 }
    39 void ini()
    40 {
    41     memset(kt,0,sizeof(kt));
    42     kt[1][0]=1;
    43     len[1]=1;
    44     for(int i=2;i<=100;i++)
    45     {
    46         mut(i);
    47         div(i);
    48     }
    49 }
    50 void print(int ord)
    51 {
    52     for(int i=len[ord]-1;i>=0;i--)
    53         printf("%d",kt[ord][i]);
    54     printf("
    ");
    55 }
    56 int main()
    57 {
    58     int n;
    59     ini();
    60     while(scanf("%d",&n))
    61     {
    62         if(n==-1) break;
    63         else print(n);
    64     }
    65     return 0;
    66 }
  • 相关阅读:
    codevs 3971 航班
    2015山东信息学夏令营 Day4T3 生产
    2015山东信息学夏令营 Day5T3 路径
    Tyvj 1221 微子危机——战略
    清北学堂模拟赛 求和
    NOIP2012同余方程
    NOIP2009 Hankson的趣味题
    bzoj1441 MIN
    国家集训队论文分类
    贪心 + DFS
  • 原文地址:https://www.cnblogs.com/LukeStepByStep/p/5778248.html
Copyright © 2011-2022 走看看