资源简介

长整数加减法运算 双向链表 数据结构 算法

资源截图

代码片段和文件信息



#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

评论

共有 条评论