绝对货真价实,绝对是C的,绝对功能强大,绝对零错误。
#include
#include
typedef int ElemType;
typedef struct DulNode{
ElemType data;
struct DulNode *prior;
struct DulNode *next;
}DulNode,*DulinkList;
void creat(DulinkList &head1,DulinkList &head2)
{char b,c; int a;
DulinkList p1,p2;
head1=p1=(DulinkList)malloc(sizeof(DulNode));
printf("请您输入第一个长整数\n");
do{
a=getchar();
if(a=='-'){head1->data=0;a=getchar()-48;}
else a=a-48;
b=getchar();
while(b!=','&&b!=';')
{
a=b-48+a*10;
b=getchar();
}
p2=(DulinkList)malloc(sizeof(DulNode));
p2->data=a;
p2->next=head1;
p2->prior=p1;
p1->next=p2;
head1->prior=p2;
p1=p2;
}while(b!=';');
c=getchar();
head2=p1=(DulinkList)malloc(sizeof(DulNode));
printf("请您输入第二个长整数\n");
do{
a=getchar();
if(a=='-'){head2->data=0;a=getchar()-48;}
else a=a-48;
b=getchar();
while(b!=','&&b!=';')
{
a=b-48+a*10;
b=getchar();
}
p2=(DulinkList)malloc(sizeof(DulNode));
p2->data=a;
p2->next=head2;
p2->prior=p1;
p1->next=p2;
head2->prior=p2;
p1=p2;
}while(b!=';');
c=getchar();
}
void add(DulinkList head1,DulinkList head2,DulinkList &head)
{int a,flag=0;DulinkList p1,p2,p3,p4;
p3=head1,p4=head2;
p1=head=(DulinkList)malloc(sizeof(DulNode));
p3=p3->prior;p4=p4->prior;
do
{a=p3->data+p4->data;
p2=(DulinkList)malloc(sizeof(DulNode));
if(a>=10000)
{a=a-10000;
if(flag==1){p2->data=a+1;flag=0;}
else p2->data=a;
flag=1;
}
else
{if(flag==1){p2->data=a+1;flag=0;}
else p2->data=a;
}
p2->next=head;
p2->prior=p1;
p1->next=p2;
head->prior=p2;
p1=p2;
p3=p3->prior;p4=p4->prior;
}while(p3!=head1&&p4!=head2);
if(p3!=head1)
{do
{
if(flag==1){a=p3->data+1;flag=0;}
else a=p3->data;
if(a>=10000){a=a-10000;flag=1;}
p2=(DulinkList)malloc(sizeof(DulNode));
p2->data=a;
p2->next=head;
p2->prior=p1;
p1->next=p2;
head->prior=p2;
p1=p2;
p3=p3->prior;}while(p3!=head1);
}
if(p4!=head2)
{do{
if(flag==1){a=p4->data+1;flag=0;}
else a=p4->data;
if(a>=10000){a=a-10000;flag=1;}
p2=(DulinkList)malloc(sizeof(DulNode));
p2->data=a;
p2->next=head;
p2->prior=p1;
p1->next=p2;
head->prior=p2;
p1=p2;
p4=p4->prior;}while(p4!=head2);
}
if(flag==1)
{
p2=(DulinkList)malloc(sizeof(DulNode));
p2->data=1;
p2->next=head;
p2->prior=p1;
p1->next=p2;
head->prior=p2;
}
if(head1->data==0&&head2->data==0)head->data=0;
}
void print(DulinkList head)
{int a;
DulinkList p=head->prior;
a=p->data;
if(head->data==0)printf("-");
while(a==0)
{p=p->prior;
a=p->data;}
printf("%d",a);
p=p->prior;
while(p!=head)
{printf(",");
a=p->data;
if(a<10)printf("000%d",a);
else if(a<100&&a>=10)printf("00%d",a);
else if(a<1000&&a>=100)printf("0%d",a);
else printf("%d",a);
p=p->prior;
}
}
int length(DulinkList head)
{int i;
DulinkList p=head->next;
for(i=0;p!=head;p=p->next)
{i++;}
return i;
}
int compare(DulinkList head1,DulinkList head2)
{int L1,L2,a,b;
DulinkList p1=head1->next,p2=head2->next;
L1=length(head