資源簡介
長整數加減法運算 雙向鏈表 數據結構 算法

代碼片段和文件信息
#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
評論
共有 條評論