求助大神 关于长整数的加法问题 编译通过 运行终止 应该是内存或数据溢出问题 但不知道哪里出错
完整代码:#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define Stack_Size 250
typedef struct{
int elem[Stack_Size];
int top;
}SeqStack; //建栈
typedef struct Node{
int data;
struct Node *next;
}Node,*BigInteger; //链表
void InitList(BigInteger L)
{
L=(BigInteger)malloc(sizeof(Node));
L->next=NULL;
}//初始化链表
void InitStack(SeqStack *S)
{
S->top=-1;
} //栈初始化
int IsEmpty(SeqStack *S)
{
return(S->top==-1? TRUE:FALSE);
} //判栈空
int IsFull(SeqStack *S)
{
return(S->top == Stack_Size-1? TRUE:FALSE);
} //判栈满
int Push(SeqStack *S,int x)
{
if(S->top == Stack_Size-1)return(FALSE);//栈已满
S->top++;
S->elem[S->top]=x;
return(TRUE);
} //入栈
int Pop(SeqStack *S,int *x)
{
if(S->top==-1)
return(FALSE);
else
{
*x=S->elem[S->top];
S->top--;
return(TRUE);
}
} //出栈
BigInteger CreateBigInteger(char *str)
{/*函数功能:把由数字组成的字符串str转化为单链表,从字符串右边开始每4位,创建一个结点,直到字符串的最左边。*/
BigInteger L,p,q;
int n,i,x,a,b;
n=strlen(str);//统计字符串str的长度n;
InitList(L);
L->data=0;
i=n-1;
while(i>=0)
{
for(x=0,a=4,b=1;a&&(i>=0);i--,a--,b*=10) x=b*(str[i]-'0')+x;
p=(Node*)malloc(sizeof(Node));
q=(Node*)malloc(sizeof(Node));
p->data=x;
q->data = x;
q->next = p;
q = p;
q->next = NULL;
}
L->next = q;
return L ;
}
BigInteger AddBigIntege (BigInteger L1,BigInteger L2)
{/*创建一个单链表用于存放L1+L2,并将该单链表作为函数值返回*/
Node *L,*p,*q1,*q2;
InitList(L);
InitList(p);
InitList(q1);
InitList(q2);
int x,carry;/*carry为进位*/
L->next=NULL;L->data=0;
q1=L1->next;
q2=L2->next;
carry=0;
while(q1&&q2){ /*两者均未到尾部*/
x=q1->data+q2->data+carry;
if(x>10000)
{carry=1;p->data=x-10000;}
else
{carry=0;p->data=x;}
L->next=p;
p=p->next;
q1=q1->next;
q2=q2->next;
}
while(q1)
{
x=q1->data+carry;
if(x>10000)
{carry=1;p->data=x-10000;}
else
{carry=0;p->data=x;}
L->next=p;
p=p->next;
q1=q1->next;
}
while(q2)
{
x=q2->data+carry;
if(x>10000)
{carry=1;p->data=x-10000;}
else
{carry=0;p->data=x;}
L->next=p;
p=p->next;
q2=q2->next;
}
if (carry){
p->data=carry;
L->next=p;
p=p->next;
}
return L;
}
int PrintBigInteger (BigInteger L)
{
int x;
SeqStack *S;
InitStack(S);
while(L)
{
L=L->next;
Push(S,L->data);
}
while(S)
{
Pop(S,&x);
if(x<1000)
printf("0d%,",x);
else if(x==0)
printf("0000,",x);
else if(x>1000)
printf("d%,",x);
}
}
int main()
{
BigInteger L1,L2;
InitList(L1);
InitList(L2);
char ch[250],cj[250];
scanf("%s",&ch);
scanf("%s",&cj);
L1=CreateBigInteger(ch);
L2=CreateBigInteger(cj);
//PrintBigInteger(AddBigIntege(L1,L2));
return 0;
}
help me!!!