| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
看完小甲鱼老师的视频教学后,自己编了一下。 
代码如下: 
#include<stdio.h> 
#include<stdlib.h> 
#include<conio.h> 
#define stackincrement 50 
#define stacksize 100 
typedef struct  
{ 
        int* top; 
        int* base; 
        int size; 
}stack; 
void initstack(stack *q) 
{ 
        q->base=(int*)malloc(stacksize*sizeof(int)); 
        if(!q->base) 
        { 
                exit(0); 
        } 
        q->top=q->base; 
        q->size=stacksize; 
} 
void push(stack *q, int a) 
{ 
        if((q->top)-(q->base)>=q->size) 
        { 
                q->base=(int*)realloc(q->base, (stackincrement+(q->size))*sizeof(int)); 
                if(!q->base) 
                { 
                        exit(0); 
                } 
                q->top=q->size+q->base; 
                q->size=q->size+stackincrement; 
        } 
        *(q->top)=a; 
        q->top++; 
} 
void pop(stack* q, int *a) 
{ 
        if(q->top==q->base) 
        { 
                return; 
        } 
        *a=*--(q->top); 
} 
int len(stack q) 
{ 
        return(q.top-q.base); 
} 
stack add(stack a, stack b) 
{ 
        stack c; 
        initstack(&c); 
        int i, j, k, flag=0; 
        if(len(a)>len(b)) 
        { 
                while(len(a)) 
                { 
                        pop(&a, &i); 
                        if(len(b)==1) 
                        { 
                                j=0; 
                        } 
                        else 
                        { 
                                pop(&b, &j); 
                        } 
                        if(i+j>=10) 
                        { 
                                k=i+j-10+flag; 
                                push(&c, k); 
                                flag=1;         
                        } 
                        else 
                        { 
                                k=i+j+flag; 
                                if(k>=10) 
                                { 
                                        k=k-10; 
                                        push(&c, k); 
                                        flag=1; 
                                } 
                                else 
                                { 
                                        push(&c, k); 
                                        flag=0; 
                                } 
                        } 
                } 
        } 
        else 
        { 
                while(len(b)!=1) 
                { 
                        pop(&b, &j); 
                        if(len(a)) 
                        { 
                                pop(&a, &i); 
                        } 
                        else 
                        { 
                                i=0; 
                        } 
                        if(i+j>=10) 
                        { 
                                k=i+j-10+flag; 
                                push(&c, k); 
                                flag=1;         
                        } 
                        else 
                        { 
                                k=i+j+flag; 
                                if(k>=10) 
                                { 
                                        k=k-10; 
                                        push(&c, k); 
                                        flag=1; 
                                } 
                                else 
                                { 
                                        push(&c, k); 
                                        flag=0; 
                                } 
                        } 
                } 
        } 
        return c; 
} 
int main() 
{ 
        int i, k; 
        char c; 
        stack a, b, d; 
        initstack(&a); 
        initstack(&b); 
        printf("输入第一个随意大小整数,以#结束\n"); 
        scanf("%c", &c); 
        while(c!='#') 
        { 
                i=c-48; 
                push(&a, i); 
                scanf("%c", &c); 
        } 
        printf("输入第二个随意大小整数,以#结束\n"); 
        scanf("%c", &c); 
        while(c!='#') 
        { 
                i=c-48; 
                push(&b, i); 
                scanf("%c", &c); 
        } 
        printf("和为\n"); 
        d=add(a, b); 
        while(len(d)) 
        { 
                pop(&d, &k); 
                printf("%d", k); 
        } 
        getch(); 
        return 0; 
} 
 |   
 
 
 
 |