资源简介
长整数加减法运算 双向链表 数据结构 算法
代码片段和文件信息
#include
#include“LINT.h“
void Add_Long_Int(LNode *firstLNode *secondLNode *result)
{
LNode *fptr*sptr;
LNode *temp;
LNode *after=NULL;
fptr=first->pior;
sptr=second->pior;
int borrow=0carry=0;
int flag=(first->data)*(second->data);
while(fptr!=first&&sptr!=second)
{
temp=new LNode;
temp->next=after;
if(!after) //处理尾节点的next和头结点的pior
{
temp->next=result;
result->pior=temp;
}
else
temp->next=after;
after=temp;
if(flag==1) //处理同符号数
{
temp->data=(fptr->data+sptr->data+carry)%10000; //四位数相加大于10000的部分
carry=(fptr->data+sptr->data+carry)/10000; //进位
}
else
{
if(first->data==-1) //被加数为负数加数为正数
{
if((fptr->data)>(sptr->data-borrow))
{
temp->data=(sptr->data+10000-fptr->data)-borrow;
borrow=1;
}
else
{
temp->data=sptr->data-fptr->data;
borrow=0;
}
}
else //被加数为正数加数为负数
{
if((fptr->data-borrow)>=sptr->data)
{
borrow=0;
temp->data=fptr->data-sptr->data-borrow;
}
else
{
temp->data=(fptr->data+10000-sptr->data)-borrow;
borrow=1;
}
}
}
fptr=fptr->pior;
sptr=sptr->pior;
}
int record=borrow;
while(fptr!=first) //处理位数不等的部分
{
temp=new LNode;
temp->next=after;
after->pior=temp;
after=temp;
if(carry==1) //处理进位
{
temp->data=(fptr->data+carry)%10000;
carry=(fptr->data+carry)/10000;
}
else if(borrow==1) //处理借位
{
if(fptr->data==0) //处理诸如100000001-1的中间0000的部分
{
temp->data=fptr->data+10000-borrow;
borrow=1;
record=borrow;
}
else
{
temp->data=fptr->data-borrow;
borrow=0;
record=borrow;
}
}
else
temp->data=fptr->data;
fptr=fptr->pior;
}
while(sptr!=second)
{
temp=new LNode;
temp->next=after;
after->pior=temp;
after=temp;
if(carry==1)
{
temp->data=(sptr->data+carry)%10000;
carry=(sptr->data+carry)/10000;
}
else if(borrow==1)
{
if(sptr->data==0)
{
temp->data=sptr->data+10000-borrow;
borrow=1;
record=borrow;
}
else
{
temp->data=sptr->data-borrow;
borrow=0;
record=borrow;
}
}
else
temp->data=sptr->data;
sptr=sptr->pior;
}
if(carry==1) //处理第一节点进位开辟新空间
{
temp=new LNode;
temp->data=carry;
temp->next=after;
after->pior=temp;
}
if(first->data>0&&second->data>0) //处理结果符号问题 存入头结点data域
result->data=1;
else if(first->data<0&&second->data<0)
result->data=-1;
else
{
if(record==1)
result->data=-1;
else
result->data=1;
}
if(temp->data==0) //处理诸如10000-9999=00001的问题
{
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2011-10-15 12:44 LONG_INT\
文件 560 2011-10-15 23:00 LONG_INT\test.cpp
文件 304 2011-10-15 18:54 LONG_INT\LINT.h
文件 529 2011-10-15 22:12 LONG_INT\show.cpp
文件 811 2011-10-15 17:22 LONG_INT\create.cpp
文件 204 2011-10-15 22:59 LONG_INT\destory.cpp
文件 3284 2011-10-15 22:57 LONG_INT\add.cpp
评论
共有 条评论