C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了经典算法11:任意长度整数加法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

下面是大佬教程code.js-code.com 通过网络收集整理的代码片段。

大佬教程小编现在分享给大家,也给大家做个参

    #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)  
    {  
        /*内存中开辟一段连续空间作为栈空间,首地址赋值给s->base*/  
        s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemTypE));  
        if(!s->basE) exit(0);                    /*分配空间失败*/  
        s->top = s->base;                    /*最开始,栈顶就是栈底*/  
        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);                                /*存储分配失败*/  
        s->top = s->base + s->stacksize;  
        s->stacksize = s->stacksize + STACKINCREMENT;        /*设置栈的最大容量*/  
        }  
        *(s->top) = e;                                    /*放入数据*/  
            s->top++;  
    }  
    /*出栈操作,用e将栈顶元素返回*/  
    void Pop(sqStack *s,ElemType *E){  
        if(s->top == s->basE) return;  
        *e = *--(s->top);  
    }  
      
    /*计算堆栈s当前的长度*/  
    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中取出的(数据)元素, 
    a3=a1+a2,c中存放进位*/  
        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;            /*产生进位的情况*/  
                   c = 1;  
              }  
              else  
                  c = 0;                    /*不产生进位*/  
             Push(s3,a3);                    /*将结果入栈s3*/  
         }  
         if(StackLen(*s1)!=0)                    /*栈s1不为空的情况*/  
         {  
            while(StackLen(*s1)!=0)  
            {  
               Pop(s1,&a1);                    /*取出s1栈的栈顶元素给a1*/  
               a3 = a1 + c ;                    /*与进位标志c相加*/  
               if(a3>'9')  
               {  
                   a3 = a3 - '9' + 47;            /*产生进位的情况*/  
                   c = 1;  
               }  
              else  
                  c = 0;                    /*不产生进位*/  
               Push(s3,a3);                    /*将结果入栈s3*/  
            }  
         }  
         else if(StackLen(*s2)!=0)                /*栈s1不为空的情况*/  
         {  
            while(StackLen(*s2)!=0)  
            {  
               Pop(s2,&a2);                    /*取出s1栈的栈顶元素给a1*/  
               a3 = a2 + c;                    /*与进位标志c相加*/  
               if(a3>'9')  
               {  
                    a3 = a3 - '9' + 47;            /*产生进位的情况*/  
                   c = 1;  
               }  
              else  
                  c = 0;                    /*不产生进位*/  
               Push(s3,a3);                    /*栈s1不为空的情况*/  
            }  
         }  
         if(c==1)  
            Push(s3,'1');                    /*如果最后有进位,将字符’1’入栈s3*/  
    }  
        
    int main()  
    {  
        char e;  
        sqStack s1,s2,s3;  
        initStack(&s1);                            /*初始化堆栈s1,存放加数*/  
        initStack(&s2);                            /*初始化堆栈s2,存放加数*/  
        initStack(&s3);                            /*初始化堆栈s3,存放结果*/  
        printf("Please input the first Integer\n");        /*输入第一个任意长整数,按”#”结尾*/  
        scanf("%c",&E);  
        while(e!='#')  
        {  
           Push(&s1,E);                            /*将加数(字符串)入栈s1*/  
           scanf("%c",&E);  
        }  
        getchar();                                /*接收回车符*/  
        printf("Please input the second Integer\n");        /*输入第二个任意长整数,按”#”结尾*/  
        scanf("%c",&E);  
        while(e!='#')  
        {  
           Push(&s2,E);                            /*将加数(字符串)入栈s2*/  
           scanf("%c",&E);  
        }  
        ADD(&s1,&s2,&s3);                        /*加法运算,将结果存放在s3中*/  
        printf("The result is\n");  
        while(StackLen(s3)!=0)                    /*输出结果,打印在屏幕上*/  
        {  
            Pop(&s3,&E);  
            printf("%c",E);  
        }  
        return 0;  

大佬总结

以上是大佬教程为你收集整理的经典算法11:任意长度整数加法全部内容,希望文章能够帮你解决经典算法11:任意长度整数加法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: