根据你的想法我写了个 一位一个结点的 只是正长整数相加 负数没有考虑 你可以自己完善下!
代码如下:
#include
#include
#define X 101 //100位加1位进位
typedef struct NODE//单链表
{
int data;
struct NODE *next;
}List;
List *Create(char *n)//加数输入到链表
{
int i,ws=0,num=0;
char *x;
List *head,*p,*q;
x=n;
while(*x++) ws++;
head=p=(List *)malloc(sizeof(List));
//printf("%s",n);
for(i=ws-1;i>=0;i--)
{
q=(List *)malloc(sizeof(List));
q->data=n[i]-'0';
if(num==0)
{
p=q;
head=p;
}
else
p->next=q;
p=q;
num++;
}
for(i=0;idata=0;
p->next=q;
p=q;
}
q=(List *)malloc(sizeof(List));
q->data=0;
p->next=q;
p=q;p->next=NULL;
return head;
}
List *SUM(List *p,List *q)//求和
{
int jw=0,tem=0;//进位
List *head,*y;
head=(List *)malloc(sizeof(List));
head=NULL;
while(p!=NULL)
{
tem=p->data+q->data+jw;
if(tem>=10)
jw=1;
else
jw=0;
tem=tem%10;
y=(List *)malloc(sizeof(List));
y->data=tem;
y->next=head;
head=y;
p=p->next;q=q->next;
}
return head;
}
void Print(List *head)//输出结果
{
int num=0;
List *p;
p=head;
while(p!=NULL)
{
if(p->data!=0)num=1;
if(num==1)
{
printf("%d",p->data);
}
p=p->next;
}
}
main()
{
List *js1,*js2,*sum1;
char *p="654456793422",*q="4567898";
js1=Create(p);//加数输入到链表
js2=Create(q);//加数输入到链表
printf("加数1:%s",p);
printf("");
printf("加数2:%s",q);
sum1=SUM(js1,js2);//求和
printf("");
printf("求和:");
Print(sum1);
printf("");
}