|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
|
|