p->data=p->data+1000; } p=p->prior; q=q->prior; } output(head1,p1); }
if(n
return OK; }
Status max_mul(LinkList &head1,LinkList &head2,LinkList &p1,LinkList &p2,LinkList &L) /*链 表 乘 法*/
{
LinkList s; LinkList b,d; LinkList p,q;
LinkList h1,h2,tail1,tail2; int n=0,m=0; int i;
LinkList r,tail,tailr;
ElemType mo,di,re,edi; int c,flag ;
p=head1; q=head2;
while(p!=NULL) /*遍历链表 然后记录链表长度*/ {
n=n+1; p=p->next; }
while(q!=NULL) /*遍历链表 然后记录链表长度*/ { m=m+1; q=q->next; }
h1=(LinkList)malloc(sizeof(LNode)); /*要装拆分第一个双向链表后的链表*/
tail1=h1;
h1->prior=NULL; i=0;
while(i<(3*n)) { p=(LinkList)malloc(sizeof(LNode)); p=tail1->next; tail1=p->prior; tail1=p; i=i+1; }
tail1->next=NULL;
h2=(LinkList)malloc(sizeof(LNode)); /*要装拆分第二个双向链表后的链表*/
tail2=h2;
h2->prior=NULL; i=0;
while(i<(3*m)) { q=(LinkList)malloc(sizeof(LNode)); q=tail2->next; tail2=q->prior; tail2=q; i=i+1; }
tail2->next=NULL;
s=head1; b=h1->next; while(s!=NULL)
{ b->data=s->data/100; /*拆分head1链表 然后放进刚刚建立好的h1双向链表中*/
b=b->next; b->data=s->data/10; b=b->next; b->data=s->data; b=b->next; s=s->next; }
s=head2; d=h2->next; while(s!=NULL) { d->data=s->data/100; /*拆分head2链表 然后放进刚刚建立好的h2双向链表中*/
d=d->next; d->data=s->data/10; d=d->next; d->data=s->data; d=d->next; s=s->next; }
/*要做 p q 两个链表相乘 要考虑进位 还有将所得结果放到哪个链表中等问题*/
L = (LinkList)malloc(sizeof(LNode)) ; /*用L来装乘完后的数据*/
if(!L)
exit(OVERFLOW); L->next = NULL; L->prior = NULL;
di = 0; edi = 0; tail = p;
while(p != NULL){ re = p->data * q->data; mo = re % 10;
if(L->prior == NULL) {
r = L;
r->data = mo + di; if (r->data >= 10){ edi = r->data / 10;
r->data = r->data % 10; } else { edi = 0; }
L->prior = L; } else {
r = (LinkList)malloc(sizeof(LNode)); r->data = mo + di; if (r->data >= 10){ edi = r->data / 10;
r->data = r->data % 10; } else { edi = 0; }
L->prior = r; r->next = L; L = r; }
di = edi + re / 10; edi = 0;
p = p->prior; }
while(di > 0){
r = (LinkList)malloc(sizeof(LNode)); r->data = di % 10; di = di / 10; L->prior = r; r->next = L; L = r;
L->prior = NULL; }
L->prior = NULL;
while (r->next != NULL) r = r->next; tailr = r; c=1;
q = q->prior;
while (q != NULL){ p = tail; r = tailr; flag = 0; di = 0; edi = 0;
for(i=1;i<=c;i++){ if(r->prior != NULL)r = r->prior; else { r = (LinkList)malloc(sizeof(LNode)); r->data = 0; L->prior = r; r->next = L; L = r;
L->prior = NULL; flag = 1; } }
while(p != NULL){
re = p->data * q->data; mo = re % 10;
if(flag == 0) r->data = r->data+ mo + di; else r->data = mo + di; if (r->data >= 10){ edi = r->data / 10;
r->data = r->data % 10; }
di = edi + re / 10; edi = 0; p = p->prior;
if(r->prior != NULL)r = r->prior; else {
r = (LinkList)malloc(sizeof(LNode)); r->data = 0; L->prior = r; r->next = L; L = r; L->prior = NULL; flag = 1; } }
if(di > 0){