要求:
1.实现大数相加
2.数的长度不能事先确定
思路:
用链表实现变长
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
char data;
struct LNode *next;
//int count;
}LNode, *LinkList;
LinkList CreatList(LinkList L);
LinkList LinkAdd(LinkList L1,LinkList L2);
int main()
{
LinkList L1,L2,Sum_L;
LNode *s;
printf("请输入第一个数:\n");
L1=CreatList(L1);
printf("请输入第二个数:\n");
L2=CreatList(L2);
Sum_L=LinkAdd(L1,L2);
s=Sum_L->next;
printf("和为:\n");
for(;s!=NULL;s=s->next)
{
printf("%c",s->data);
}
printf("\n");
return 0;
}
LinkList CreatList(LinkList L)
{
LNode *s;
char c;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
//L->count=0;
// scanf("%d",&x);
while(scanf("%c",&c)!=EOF)
{
s=(LNode*)malloc(sizeof(LNode));
s->data=c;
s->next=L->next;
L->next=s;
// L->count++;
}
return L;
}
LinkList LinkAdd(LinkList L1,LinkList L2)
{
LNode *p1=L1->next;
LNode *p2=L2->next;
int count=0; //进位
LNode *s;
char c;
LinkList Sum_L=(LinkList)malloc(sizeof(LNode));
Sum_L->next=NULL;
for(;p1!=NULL&&p2!=NULL;p1=p1->next,p2=p2->next)
{
c=p1->data+p2->data-'0'+count;
if(c>'9')
{
c=c-10;
count=1;
}
else
count=0;
s=(LNode*)malloc(sizeof(LNode));
s->data=c;
s->next=Sum_L->next;
Sum_L->next=s;
}
while(p1!=NULL)
{
c=p1->data+count;
if(c>'9')
{
c=c-10;
count=1;
}
else
count=0;
s=(LNode*)malloc(sizeof(LNode));
s->data=c;
s->next=Sum_L->next;
Sum_L->next=s;
p1=p1->next;
}
while(p2!=NULL)
{
c=p2->data+count;
if(c>'9')
{
c=c-10;
count=1;
}
else
count=0;
s=(LNode*)malloc(sizeof(LNode));
s->data=c;
s->next=Sum_L->next;
Sum_L->next=s;
p2=p2->next;
}
if(count==1)
{
s=(LNode*)malloc(sizeof(LNode));
s->data='1';
s->next=Sum_L->next;
Sum_L->next=s;
}
return Sum_L;
}
/*****************************************
Author:张女名
Date:2017/3/12
Problem:大数相加,不能事先确定长度
*****************************************/