中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

經(jīng)典算法11:任意長(zhǎng)度整數(shù)加法

2018-07-20    來(lái)源:open-open

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用
    #include   
    #include   
    #include   
      
    #define STACK_INIT_SIZE 20  
    #define STACKINCREMENT 10  
    /*定義堆棧*/  
    typedef  char ElemType;  
    typedef struct{  
       ElemType *base;  
       ElemType *top;  
       int stacksize;  
    }sqStack;  
    /*初始化棧*/  
    void initStack(sqStack *s)  
    {  
        /*內(nèi)存中開(kāi)辟一段連續(xù)空間作為棧空間,首地址賦值給s->base*/  
        s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));  
        if(!s->base) exit(0);                    /*分配空間失敗*/  
        s->top = s->base;                    /*最開(kāi)始,棧頂就是棧底*/  
        s->stacksize = STACK_INIT_SIZE;        /*最大容量為STACK_INIT_SIZE */  
    }  
    /*入棧操作,將e壓入棧中*/  
    void Push(sqStack *s, ElemType e){  
        if(s->top - s->base >= s->stacksize){  
        /*棧滿,追加空間*/  
        s->base = (ElemType *)realloc(s->base, (s->stacksize +  
        STACKINCREMENT)*sizeof(ElemType));  
        if(!s->base) exit(0);                                /*存儲(chǔ)分配失敗*/  
        s->top = s->base + s->stacksize;  
        s->stacksize = s->stacksize + STACKINCREMENT;        /*設(shè)置棧的最大容量*/  
        }  
        *(s->top) = e;                                    /*放入數(shù)據(jù)*/  
            s->top++;  
    }  
    /*出棧操作,用e將棧頂元素返回*/  
    void Pop(sqStack *s , ElemType *e){  
        if(s->top == s->base) return;  
        *e = *--(s->top);  
    }  
      
    /*計(jì)算堆棧s當(dāng)前的長(zhǎng)度*/  
    int StackLen(sqStack s){  
        return (s.top - s.base) ;  
    }  
       
    void ADD(sqStack *s1,sqStack *s2,sqStack *s3)  
    {  
     char a1,a2,a3,c=0;                 /*a1,a2分別存放從堆棧s1,s2中取出的(數(shù)據(jù))元素, 
    a3=a1+a2,c中存放進(jìn)位*/  
        while(StackLen(*s1)!=0 && StackLen(*s2)!=0)  
        {  
             Pop(s1,&a1);                    /*取出s1棧的棧頂元素給a1*/  
             Pop(s2,&a2);                    /*取出s2棧的棧頂元素給a2*/  
             a3 = (a1-48) + (a2-48) + c + 48;        /*相加*/  
             if(a3>'9')  
             {  
                   a3 = a3 - '9' + 47;            /*產(chǎn)生進(jìn)位的情況*/  
                   c = 1;  
              }  
              else  
                  c = 0;                    /*不產(chǎn)生進(jìn)位*/  
             Push(s3,a3);                    /*將結(jié)果入棧s3*/  
         }  
         if(StackLen(*s1)!=0)                    /*棧s1不為空的情況*/  
         {  
            while(StackLen(*s1)!=0)  
            {  
               Pop(s1,&a1);                    /*取出s1棧的棧頂元素給a1*/  
               a3 = a1 + c ;                    /*與進(jìn)位標(biāo)志c相加*/  
               if(a3>'9')  
               {  
                   a3 = a3 - '9' + 47;            /*產(chǎn)生進(jìn)位的情況*/  
                   c = 1;  
               }  
              else  
                  c = 0;                    /*不產(chǎn)生進(jìn)位*/  
               Push(s3,a3);                    /*將結(jié)果入棧s3*/  
            }  
         }  
         else if(StackLen(*s2)!=0)                /*棧s1不為空的情況*/  
         {  
            while(StackLen(*s2)!=0)  
            {  
               Pop(s2,&a2);                    /*取出s1棧的棧頂元素給a1*/  
               a3 = a2 + c;                    /*與進(jìn)位標(biāo)志c相加*/  
               if(a3>'9')  
               {  
                    a3 = a3 - '9' + 47;            /*產(chǎn)生進(jìn)位的情況*/  
                   c = 1;  
               }  
              else  
                  c = 0;                    /*不產(chǎn)生進(jìn)位*/  
               Push(s3,a3);                    /*棧s1不為空的情況*/  
            }  
         }  
         if(c==1)  
            Push(s3,'1');                    /*如果最后有進(jìn)位,將字符’1’入棧s3*/  
    }  
        
    int main()  
    {  
        char e;  
        sqStack s1,s2,s3;  
        initStack(&s1);                            /*初始化堆棧s1,存放加數(shù)*/  
        initStack(&s2);                            /*初始化堆棧s2,存放加數(shù)*/  
        initStack(&s3);                            /*初始化堆棧s3,存放結(jié)果*/  
        printf("Please input the first integer\n");        /*輸入第一個(gè)任意長(zhǎng)整數(shù),按”#”結(jié)尾*/  
        scanf("%c",&e);  
        while(e!='#')  
        {  
           Push(&s1,e);                            /*將加數(shù)(字符串)入棧s1*/  
           scanf("%c",&e);  
        }  
        getchar();                                /*接收回車符*/  
        printf("Please input the second integer\n");        /*輸入第二個(gè)任意長(zhǎng)整數(shù),按”#”結(jié)尾*/  
        scanf("%c",&e);  
        while(e!='#')  
        {  
           Push(&s2,e);                            /*將加數(shù)(字符串)入棧s2*/  
           scanf("%c",&e);  
        }  
        ADD(&s1,&s2,&s3);                        /*加法運(yùn)算,將結(jié)果存放在s3中*/  
        printf("The result is\n");  
        while(StackLen(s3)!=0)                    /*輸出結(jié)果,打印在屏幕上*/  
        {  
            Pop(&s3,&e);  
            printf("%c",e);  
        }  
        return 0;  

標(biāo)簽:

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:將JDBC ResultSet結(jié)果集轉(zhuǎn)成List

下一篇:純C語(yǔ)言寫(xiě)的貪吃蛇源碼