j--; //用来计数 i--; //用来计数 }// while(j!=0)
if(p->data>9&&i>1) /*长整数多余的位数值大于9向前一位进一,
当最高位大于9则不进一*/
{ p->data=p->data-10; p->prior->data=p->prior->data+1; }//if r=p; //指针r最终指向链表的第一个结点 p=p->prior; //指针向前移 i--; //用来计数 }// while(i!=0) }//if(i>j)
else if(i= =j) //当两个长整数的长度相等 { while(i!=0) //控制整数的长度 { if((p->data+q->data)>9&&i>1) /*两数相加大于9向前一位进一,
当最高位大于9则不进一*/
{ p->data=p->data+q->data-10; p->prior->data=p->prior->data+1; } else p->data=p->data+q->data; //不进位 r=p; //指针r最终指向链表的第一个结点 p=p->prior; //指针向前移 q=q->prior; //指针向前移 i--; //用来计数 }//while(i!=0) } //else if(i= =j)
else //当第一个长整数的长度小于第二个 { while(j!=0) //控制长整数的长度 { while(i!=0) //控制短整数的长度 { if(p->data+q->data>9) //当两数相加大于9向前一位进一 { q->data=q->data+p->data-10; q->prior->data=q->prior->data+1; } else q->data=p->data+q->data; //不进位 p=p->prior; //指针向前移
第 6 页 共 15 页
q=q->prior; //指针向前移 j--; //用来计数 i--; //用来计数 }// while(i!=0)
if(q->data>9&&j>1) /*长整数多余的位数值大于9向前一位进一,
当最高位大于9则不进一*/
{ q->data=q->data-10; q->prior->data=q->prior->data+1; } r=q; //指针r最终指向链表的第一个结点 q=q->prior; //指针向前移 j--; //用来计数 }// while(j!=0) }// else }//if(a= ='+')
if(a= ='-') //将两个长整数相减 { if(i>j) //当第一个长整数的长度大于第二个时,用第一个长整数减第二个 { while(i!=0) //控制长整数的长度 { while(j!=0) //控制短整数的长度 { if(p->data
第二个长整数的数,则向前一位借一*/
{ p->data=p->data-q->data+10; p->prior->data=p->prior->data-1; } else p->data=p->data-q->data; //不借一 p=p->prior; //指针向前移 q=q->prior; //指针向前移 j--; //用来计数 i--; //用来计数 } // while(j!=0) if(p->data<0&&i>1) //长整数多余的位数值小于0向前一位借一, { p->data=p->data+10; p->prior->data=p->prior->data-1; } r=p; //指针r最终指向链表的第一个结点 if(p->data= =0&&i= =1)// 当最高位等于0时,则r指向下一结点 {
第 7 页 共 15 页
r=p->next; break; } p=p->prior; //指针向前移 i--; //用来计数 }// while(i!=0) }//if(i>j) else if(i= =j) //当第一个长整数的长度等于第二个的长度 { int c=0,h=i,k=j; //定义几个临时整型变量 p1=p;q1=q; //使指针p1指向p,指针q1指向q while(i!=1) //将指针移到第一结点 { p1=p1->prior; //指针向前移 q1=q1->prior; //指针向前移 i--; //用来计数 } while(j!=0) /*判断两个长整数的大小,从高位开始判断, c=1,
表示第一个长整数大于或者等于第二个长整数,c=0则小于*/ { if(p1->data>q1->data) { c=1; break; } else if(p1->data
长整数的数,则向前一位借一*/
第 8 页 共 15 页
{ p->data=p->data-q->data+10; p->prior->data=p->prior->data-1; } else p->data=p->data-q->data; //不借一 r=p; //指针r最终指向链表的第一个结点 p=p->prior; //指针向前移 q=q->prior; //指针向前移 h--; //用来计数 }// while(h!=0) while(r->data= =0&&k>1) /*如果链表的的高位为0,则r向下一结点 移到,直到最后一位不移动*/ { k--; r=r->next; } }// if (c= =1) if(c= =0) //第一个长整数小于第二个长整数 { while(h!=0) //控制整数的长度 { if(p->data>q->data&&h>1) /*当第二个长整数的数小于第
一个长整数的数,则向前一位借一*/
{ q->data=q->data-p->data+10; q->prior->data=q->prior->data-1; } else q->data=q->data-p->data; //不借一 r=q; //指针r最终指向链表的第一个结点 p=p->prior; //指针向前移 q=q->prior; //指针向前移 h--; //用来计数 }// while(h!=0) while(r->data= =0) /*如果链表的的高位为0,则r向下一结点移到*/ { r=r->next; } r->data=-r->data; //如果高位不为0,则取负数 }// if(c= =0) }// else if(i= =j) else //当第一个长整数的长度小于第二个 { while(j!=0) //控制长整数的长度 {
第 9 页 共 15 页
}
6、销毁链表模块,程序结束后释放链表开辟的空间
while(i!=0) //控制短整数的长度 {
if(p->data>q->data) /*当第二个长整数的数小于第
一个长整数的数,则向前一位借一*/
{ q->data=q->data-p->data+10; q->prior->data=q->prior->data-1; } else q->data=q->data-p->data; //不借一 p=p->prior; //指针向前移 q=q->prior; //指针向前移 j--; //用来计数 i--; //用来计数 }// while(i!=0) if(q->data<0&&j>1) /*长整数多余的位数值小于0向前一位借一,
当到时最高位则不借一*/
{ q->data=q->data+10; q->prior->data=q->prior->data-1; } r=q; //指针r最终指向链表的第一个结点 if(r->data= =0&&j= =1) /*如果最高位值为0,
则r指向下一结点,并取负数*/
{ r=r->next; r->data=-r->data; break; } if(r->data!=0&&j= =1) //如果最高位值不为0,取负数
r->data=-r->data;
q=q->prior; //指针向前移 j--; //用来计数 }// while(j!=0) }// else } //if(a= ='-')
while(r!=NULL) //输出加减运算后的值 { cout<
cout< 第 10 页 共 15 页