zoukankan      html  css  js  c++  java
  • hdu 1041 (OO approach, private constructor to prevent instantiation, sprintf) 分类: hdoj 2015-06-17 15:57 25人阅读 评论(0) 收藏

    a problem where OO seems more natural to me, implementing a utility class not instantiable.
    how to prevent instantiation, thanks to http://stackoverflow.com/questions/10558393/prevent-instantiation-of-an-object-outside-its-factory-method/10558404#10558404

    #include <cstdio>
    #include <algorithm>
    
    class CompTrans {
        CompTrans() { }
        static const unsigned NUMS_LEN=240000, MAX_NUM=1000, BASE=1000000000;
        static bool isinitialized;
        static char nums[NUMS_LEN];
        static char* pos[MAX_NUM+2];
    public:
        static bool isinited() { return isinitialized; }
        static void init();
        static void printnth(unsigned n) { puts(pos[n]); }
        static unsigned getMAX_NUM() { return MAX_NUM; }
    };
    bool CompTrans::isinitialized=false;
    char CompTrans::nums[];
    char* CompTrans::pos[];
    void CompTrans::init() {
        if(isinited()) return;
        int i,j,k;
        char *p=nums;
        const int NSIZE=40;
        unsigned n1[NSIZE]={0}, n2[NSIZE]={1}, n3[NSIZE]={0},tmp, *p1,*p2,*p3,*ptmp, carry;
        p1=n1,p2=n2,p3=n3;
        for(k=0, i=1;i<=MAX_NUM;++i) {
            pos[i]=p;
            p+=sprintf(p,"%u",p1[k]);
            for(j=k-1;j>=0;--j) p+=sprintf(p,"%09u",p1[j]);
            *p++=0;
            if(p2[k+1]!=0) ++k;
            for(carry=0, j=0;j<=k;++j) {
                tmp=carry+p2[j]+(p1[j]<<1);
                carry=tmp/BASE;
                p3[j]=tmp%BASE;
            }
            p3[j]=carry;
            ptmp=p1; p1=p2; p2=p3; p3=ptmp;
        }
        isinitialized=true;
    }
    
    int main() {
        //freopen("input.txt","r",stdin);
        int n;
        if(!CompTrans::isinited()) CompTrans::init();
        while(scanf("%d",&n)!=EOF && n<=CompTrans::getMAX_NUM()) {
            CompTrans::printnth(n);
        }
        return 0;
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。// p.s. If in any way improment can be achieved, better performance or whatever, it will be well-appreciated to let me know, thanks in advance.

  • 相关阅读:
    Hash表的查找-C语言
    二叉排序树-C语言
    线性表的查找算法-C语言
    拓扑排序和关键路径
    图结构的创建与遍历-C语言
    MySQL数据库基本脚本命令
    哈夫曼树编码-C语言
    协程简述
    Python多线程编程-Threading库
    Python多进程编程-multiprocessing库
  • 原文地址:https://www.cnblogs.com/qeatzy/p/4716227.html
Copyright © 2011-2022 走看看