长整数四则运算源代码数据结构Word文档下载推荐.docx

上传人:b****6 文档编号:17305061 上传时间:2022-12-01 格式:DOCX 页数:29 大小:19.34KB
下载 相关 举报
长整数四则运算源代码数据结构Word文档下载推荐.docx_第1页
第1页 / 共29页
长整数四则运算源代码数据结构Word文档下载推荐.docx_第2页
第2页 / 共29页
长整数四则运算源代码数据结构Word文档下载推荐.docx_第3页
第3页 / 共29页
长整数四则运算源代码数据结构Word文档下载推荐.docx_第4页
第4页 / 共29页
长整数四则运算源代码数据结构Word文档下载推荐.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

长整数四则运算源代码数据结构Word文档下载推荐.docx

《长整数四则运算源代码数据结构Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《长整数四则运算源代码数据结构Word文档下载推荐.docx(29页珍藏版)》请在冰豆网上搜索。

长整数四则运算源代码数据结构Word文档下载推荐.docx

for(;

k&

0;

k--)

r=r*a;

returnr;

}

//输入转换函数

Statusconversion(charstr[],NodeList&

amp;

oprh)

{//将字符串形式的操作数转换成所需的类型

NodeListp;

inti,k,buffer;

k=buffer=0;

oprh=(NodeList)malloc(LEN);

oprh-&

next=oprh;

prior=oprh;

for(i=strlen(str)-1;

i&

=0;

i--)

//若输入的数不合法就返回重新输入

if((i!

=0||(str[0]!

=&

#39;

-&

&

&

str[0]!

+&

))&

(str[i]&

9&

||str[i]&

0&

))

returnERROR;

if(str[0]==&

str[1]!

\0&

if((str[0]==&

||str[0]==&

)&

str[1]==&

if(str[i]!

str[i]!

buffer=buffer+(str[i]-&

)*axp(10,k);

k++;

if(k==4||str[i-1]==&

||str[i-1]==&

||i==0)

{//将新建结点插入到头结点之后

p=(NodeList)malloc(LEN);

next-&

prior=p;

p-&

next=oprh-&

next;

next=p;

data=buffer;

buffer=k=0;

data=&

;

else

returnOK;

//输入函数

Statusinput(NodeList&

opr1,NodeList&

opr2,charstr[])

intflag=OK;

printf(&

quot;

\n请输入第一个操作数:

\n&

);

scanf(&

%s&

str);

getchar();

flag=conversion(str,opr1);

while(!

flag)

ERROR!

Inputagain:

\n请输入第二个操作数:

flag=conversion(str,opr2);

//========================================================================================

 

//=======================================输出模块=========================================

//输出函数

Statusoutput(NodeListoprr,charstr[])

Statusinitbuf(charstr[]);

inti,j,num[4];

if(!

oprr)

p=oprr;

i=j=0;

initbuf(str);

if(oprr-&

data==&

str[i++]=&

p=p-&

if(p-&

next==oprr&

p-&

data==0)//若要输出的数为0则执行

while(p!

=oprr)

num[0]=p-&

data/1000;

num[1]=(p-&

data-num[0]*1000)/100;

num[2]=(p-&

data-num[0]*1000-num[1]*100)/10;

num[3]=

data-num[0]*1000-num[1]*100-num[2]*10;

while(j&

4)

if(num[j]!

=0||(str[0]==&

)||(str[0]!

//此判断语句是为了避免输出诸如:

00123…的情况

str[i++]=num[j]+&

j++;

}

j=0;

str[i]=&

//==================================预处理及杂项操作模块==================================

//缓冲区部分初始化函数

Statusinitbuf(charstr[])

inti;

for(i=0;

=10;

i++)

//比较链表长度函数

intcmplinklen(NodeListopr1,NodeListopr2)

{//opr1链比opr2链长则返回1,短则返回-1,否则返回0

NodeListp1,p2;

p1=opr1-&

prior;

p2=opr2-&

while(p1-&

prior!

=opr1&

p2-&

=opr2)

p1=p1-&

p2=p2-&

if(p1-&

=opr1)

if(p2-&

return-1;

return0;

//求链表长度

intlength(NodeListoprr)

intcount=0;

NodeListp=oprr-&

count++;

returncount;

//生成指定长度链表

StatusCreat(NodeList&

oprr,intlen)

oprr=(NodeList)malloc(LEN);

while(len&

0)

next=(NodeList)malloc(LEN);

?

len--;

next=oprr;

oprr-&

//比较opr1、opr2绝对值的大小

intcompare(NodeListopr1,NodeListopr2)

if(cmplinklen(opr1,opr2)==1)//opr1比较长

elseif(cmplinklen(opr1,opr2)==-1)//opr2比较长

else//长度相等的情况

data==p2-&

data&

p1-&

next!

=opr1)//注意不要少了p1-&

=opr1这个条件

data&

p2-&

data)

elseif(p1-&

//-----------------------初始化链表函数-----------------------

Statusinit(NodeList&

oppr)

oppr=NULL;

}//init

//销毁链表函数

Statusdistroy(NodeList&

NodeListq;

if(oprr)

q=oprr-&

while(q!

free(q-&

prior);

q=q-&

oprr=NULL;

}//distroy

//链表短赋值函数

Statusevaluate(NodeList&

opri,inti)

{//将i的值转换成万进制类型,i为整形变量

opri=(NodeList)malloc(LEN);

opri-&

data=i;

next=opri;

prior=opri-&

prior=opri;

}//evaluate

//=======================================加减法模

块=======================================

//加法基本操作

Statusadd_bas(NodeListopr1,NodeListopr2,NodeList&

{//本算法实现A,B相加的操作。

intCF,buffer;

NodeListp1,p2,p3;

prior=oprr;

CF=buffer=0;

while(p1!

p2!

buffer=p1-&

data+p2-&

data+CF;

CF=buffer/10000;

//若buffer的值大于9999则产生进位,赋给CF

//将新建结点插入到头结点之后

p3=(NodeList)malloc(LEN);

prior=p3;

p3-&

next=oprr-&

next=p3;

data=buffer%10000;

//应该将buffer的第四位赋给p3-&

data

//..........................

{//处理opr1链的剩余部分

while(p2!

{//处理opr2链的剩余部分

buffer=p2-&

if(CF)

data=CF;

//减法基本操作

Statussub_bas(NodeListopr1,NodeListopr2,NodeList&

{//本算法实现A,B相减的操作。

//将A链分成与B链长相等的底位部分,和剩余的高位部分,并做相应处理。

intCF,buffer,flag;

NodeListp1,p2,p3,qh,qt,qq;

CF=buffer=flag=0;

{//opr2链的长度小于等于opr1链的

(p2-&

data+CF))

buffer=10000+p1-&

data-(p2-&

data+CF);

CF=1;

CF=0;

{//处理opr1链剩下的部分

CF)

data-CF;

//处理链表开头结点值为0的无意义情况,若链表本身表示0,则不做如下处理

p3=oprr-&

while(p3-&

data==0&

p3-&

p3=p3-&

flag=1;

if(flag)

qh=oprr-&

//保存无用结点的头尾指针

qt=p3-&

//为释放做准备

//重接next链

//重接prior链

qt-&

next=NULL;

while(qh!

=NULL)

{//释放无用结点

qq=qh;

qh=qh-&

free(qq);

//--------------------------------------------------------

//---------------------带符号加法函数---------------------

Statusadd(NodeListopr1,NodeListopr2,NodeList&

if(opr1==NULL||opr2==NULL)

if(opr1-&

data==opr2-&

{//opr1,opr2符号相同

add_bas(opr1,opr2,oprr);

)//opr1与opr2均为正数,即A+B的形式(A,B均是正数,下同)

else//opr1与opr2均为负数,即(-A)+(-B)的形式

}//if(opr1-&

{//符号不相同

{//A+(-B)的情况

if(compare(opr1,opr2)==-1)

{//A&

B的情况

sub_bas(opr2,opr1,oprr);

}//if(compare(opr1,opr2)==-1)

=B的情况

sub_bas(opr1,opr2,oprr);

}//else

opr2-&

{//(-A)+B的情况

if(compare(opr1,opr2)==1)

}//if(compare(opr1,opr2)==1)

}//add

//---------------------带符号减法函数----------------------

Statussub(NodeListopr1,NodeListopr2,NodeList&

{//A-B的情况

e

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 城乡园林规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1