《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告任意長(zhǎng)的整數(shù)加減法運(yùn)算_第1頁(yè)
《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告任意長(zhǎng)的整數(shù)加減法運(yùn)算_第2頁(yè)
《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告任意長(zhǎng)的整數(shù)加減法運(yùn)算_第3頁(yè)
《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告任意長(zhǎng)的整數(shù)加減法運(yùn)算_第4頁(yè)
《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告任意長(zhǎng)的整數(shù)加減法運(yùn)算_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

PAGE1《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告任意長(zhǎng)的整數(shù)加減法運(yùn)算任意長(zhǎng)的整數(shù)加減法運(yùn)算題目要求:設(shè)計(jì)算法,實(shí)現(xiàn)一個(gè)任意長(zhǎng)的整數(shù)進(jìn)行加法、減法運(yùn)算的演示程序。例如:1234,5123,4512,3451,2345與-1111,1111,1111,1111,1111的加法結(jié)果為:0123,4012,3401,2340,1234。基本要求如下:利用鏈表實(shí)現(xiàn)長(zhǎng)整數(shù)的存儲(chǔ),每個(gè)節(jié)點(diǎn)含一個(gè)整型變量;整型變量的范圍:-(2^15-1)~(2^15-1);輸入與輸出形式每四位一組,組間用逗號(hào)分隔開(kāi)。如:1986,8213,1935,2736,3299;界面友好,每步給出適當(dāng)?shù)牟僮魈崾?,并且系統(tǒng)具有一定的容錯(cuò)能力。至少給出下面的測(cè)試數(shù)據(jù):(1)0;0(2)-2345,6789;-7654,3211(3)-9999,9999;1,0000,0000,0000(4)1,0001,0001;-1,0001,0001(5)1,0001,0001;-1,0001,0000(6)-9999,9999,9999;-9999,9999,9999(7)1,0000,9999,9999;1一、需求分析設(shè)計(jì)一個(gè)實(shí)現(xiàn)長(zhǎng)整數(shù)進(jìn)行四則運(yùn)算的程序,長(zhǎng)整數(shù)長(zhǎng)度在二十位以上,有正負(fù)數(shù)的區(qū)別。輸入每四位一組,組間用逗號(hào)隔開(kāi),長(zhǎng)整數(shù)位數(shù)沒(méi)有上限,以分號(hào)結(jié)束長(zhǎng)整型數(shù)據(jù)的輸入。用lnode結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)數(shù)據(jù)。每一個(gè)數(shù)據(jù)有一個(gè)頭結(jié)點(diǎn),它的data域用來(lái)放數(shù)據(jù)的正負(fù)數(shù)。其余結(jié)點(diǎn)的數(shù)都為正整數(shù)。程序包含數(shù)據(jù)的輸入,判斷,運(yùn)算,輸出和主函數(shù)。具體程序執(zhí)行的命令包括:輸入函數(shù):inputa();inputb();//的輸入并建立雙向循環(huán)鏈表判斷函數(shù):compare();//比較數(shù)據(jù)的大小運(yùn)算函數(shù):unsigndeadd();//無(wú)符號(hào)的加法unsigndesub();//無(wú)符號(hào)的減法add();sub();mul();div();//加減乘除四則運(yùn)算輸出函數(shù):divput();//除法結(jié)果的輸出函數(shù)putoutc();//其余結(jié)果的輸出函數(shù)主函數(shù):main();5、【問(wèn)題描述】

設(shè)計(jì)一個(gè)實(shí)現(xiàn)任意長(zhǎng)的整數(shù)進(jìn)行加法運(yùn)算的演示程序【基本要求】:利用雙向循環(huán)鏈表實(shí)現(xiàn)長(zhǎng)整數(shù)的存儲(chǔ),每個(gè)結(jié)點(diǎn)含一個(gè)整形變量。任何整形變量的范圍是-(215-1)~(215-1)。輸入和輸出形式:按中國(guó)對(duì)于長(zhǎng)整數(shù)的表示習(xí)慣,每四位一組,組間用逗號(hào)隔開(kāi)。

【測(cè)試數(shù)據(jù)】

(1)0;0;應(yīng)輸出“0”。

(2)-2345,6789;-7654,3211;應(yīng)輸出“-1,0000,0000”。

(3)-9999,9999;1,0000,0000,0000;應(yīng)輸出“9999,0000,0001”。

(4)1,0001,0001;-1,0001,0001;應(yīng)輸出“0”。

(5)1,0001,0001;-1,0001,0000;應(yīng)輸出“1”。

(6)-9999,9999,9999;-9999,9999,9999;應(yīng)輸出“1,9999,9999,9998”。

(7)1,0000,9999,9999;1;應(yīng)輸出“1,0001,0000,0000”。二、概要設(shè)計(jì)首先要考慮的是如何表示長(zhǎng)整型數(shù)??梢?位數(shù)形成1組,而一個(gè)長(zhǎng)整型數(shù)可能會(huì)有很多組這種4位數(shù),而每節(jié)之間是有先后順序的,因此我們可以考慮用數(shù)組和鏈表來(lái)存儲(chǔ)數(shù)據(jù)。(1)再考慮到每個(gè)長(zhǎng)整型數(shù)的長(zhǎng)度在輸入之間是無(wú)法預(yù)知的,因此使用鏈表在存儲(chǔ)空間的分配上更方便一些。(2)在輸入數(shù)據(jù)時(shí)總是從高位到低位地存儲(chǔ),而計(jì)算時(shí)總是從低位向高位運(yùn)算,因此采用雙向鏈表更方便,而為了從頭結(jié)點(diǎn)方便地轉(zhuǎn)到尾結(jié)點(diǎn)可以采用循環(huán)鏈表。綜上考慮,應(yīng)以雙向循環(huán)鏈表表示長(zhǎng)整數(shù),每個(gè)結(jié)點(diǎn)含一個(gè)整型變量,且僅絕對(duì)值不超過(guò)9999的整數(shù),整個(gè)鏈表用十進(jìn)制數(shù)表示。(3)對(duì)于每一個(gè)長(zhǎng)整型數(shù)可以設(shè)置一個(gè)頭結(jié)點(diǎn),其中的數(shù)據(jù)域用來(lái)表示該長(zhǎng)整型數(shù)的正負(fù)號(hào)及組數(shù),該值的符號(hào)則表示該長(zhǎng)整型數(shù)的符號(hào),該數(shù)的絕對(duì)值表示該長(zhǎng)整型數(shù)包含的4位數(shù)的組數(shù)。第一個(gè)存儲(chǔ)4位數(shù)據(jù)組的結(jié)點(diǎn)稱為首結(jié)點(diǎn),而最后一個(gè)4位數(shù)據(jù)組結(jié)點(diǎn)稱為尾結(jié)點(diǎn)。為此需要結(jié)構(gòu)數(shù)據(jù)類型:雙向循環(huán)鏈表:typedefstructlnode{//結(jié)點(diǎn)結(jié)構(gòu)體 intdata; structlnode*next; structlnode*prior;}lnode,*lnodelist主要的模塊可分為輸入函數(shù):inputa();inputb();//的輸入并建立雙向循環(huán)鏈表判斷函數(shù):compare();//比較兩個(gè)數(shù)據(jù)的大小,進(jìn)行相應(yīng)的的計(jì)算。運(yùn)算函數(shù):add();sub();mul();div();//運(yùn)算輸出函數(shù):divput();putoutc();//除法的輸出及其他運(yùn)算的輸出。主函數(shù):main();三、詳細(xì)設(shè)計(jì)程序流程圖運(yùn)行果及相應(yīng)界面運(yùn)行果及相應(yīng)界面從左到右依次進(jìn)行直接相加輸入存儲(chǔ)數(shù)據(jù)是否進(jìn)位Main退出程序#include<iostream>usingnamespacestd;#include<stdio.h>#defineOK1;#defineFALSE0;typedefstructlnode{//結(jié)點(diǎn)結(jié)構(gòu)體 intdata; structlnode*next; structlnode*prior;}lnode,*lnodelist;intcompare(lnodelist&ahead,lnodelist&bhead,int&q)//比較a和b的大小{ lnode*pa,*pb; intbcount=0,acount=0; pa=ahead->next;pb=bhead->next; while(pa!=ahead) {acount++;pa=pa->next;} while(pb!=bhead) {bcount++;pb=pb->next;} if(acount>bcount)q=1; elseif(acount<bcount)q=-1; else { pa=ahead->prior; pb=bhead->prior; while((pa->data==pb->data)&&(pa->prior!=ahead)) {pa=pa->prior;pb=pb->prior;} if(pa->data>pb->data)q=1; elseif(pa->data<pb->data)q=-1; elseq=0; }return0;}intinputa(lnodelist&ahead)//輸入長(zhǎng)整數(shù)a{ lnode*p;charch;intafirst; cout<<"請(qǐng)輸入第一個(gè)無(wú)符號(hào)長(zhǎng)整型數(shù),要求每四位用逗號(hào)隔開(kāi)末尾為分號(hào):"<<endl; p=ahead=newlnode;//頭結(jié)點(diǎn) p->data=0; p->next=p; p->prior=p; cin>>afirst>>ch;//輸入第一個(gè)結(jié)點(diǎn)數(shù)據(jù) if(afirst<0) {ahead->data=-1;afirst=-afirst;} elseahead->data=1; p=newlnode; p->data=afirst; p->next=ahead; ahead->prior=p;ahead->next=p; p->prior=ahead; while(ch!=';') { cin>>afirst>>ch; p=newlnode; p->data=afirst; p->next=ahead->next; ahead->next->prior=p; ahead->next=p; p->prior=ahead; } returnOK;}intinputb(lnodelist&bhead)//輸入長(zhǎng)整數(shù)b{ lnode*p;charch;intbfirst; cout<<"請(qǐng)輸入第二個(gè)無(wú)符號(hào)長(zhǎng)整型數(shù),要求每四位用逗號(hào)隔開(kāi)末尾為分號(hào):"<<endl; p=bhead=newlnode;//頭結(jié)點(diǎn) p->data=0; p->next=p; cin>>bfirst>>ch;//輸入第一個(gè)結(jié)點(diǎn)數(shù)據(jù) if(bfirst<0) {bhead->data=-1;bfirst=-bfirst;} elsebhead->data=1; p=newlnode; p->data=bfirst; p->next=bhead;bhead->prior=p; bhead->next=p; p->prior=bhead; while(ch!=';') { cin>>bfirst>>ch; p=newlnode; p->data=bfirst; p->next=bhead->next; bhead->next->prior=p; bhead->next=p; p->prior=bhead; } returnOK;}voidputoutc(lnode*chead)//輸出結(jié)果{ lnode*s,*pr; pr=chead->next; if(pr!=chead) {cout<<pr->data;pr=pr->next;} while(pr!=chead) { if(pr->data==0) cout<<"0000"; elseif(pr->data>0&&pr->data<10) cout<<"000"; elseif(pr->data>=10&&pr->data<100) cout<<"00"; elseif(pr->data>=100&&pr->data<1000) cout<<"0"; cout<<pr->data; s=pr; pr=pr->next; deletes; }cout<<endl;}intunsigndeadd(lnodelist&ahead,lnodelist&bhead)//無(wú)符號(hào)長(zhǎng)整數(shù)的加法{ intsum,carry=0;//進(jìn)位 lnode*pa,*pb; lnode*p,*chead; pa=ahead->next; pb=bhead->next; p=chead=newlnode;//頭結(jié)點(diǎn) p->data=0; p->next=p; p->prior=p; while(pa!=ahead&&pb!=bhead) {sum=pa->data+pb->data+carry; p=newlnode; p->data=sum%10000; carry=sum/10000;p->next=chead->next; chead->next->prior=p; chead->next=p; p->prior=chead; pa=pa->next; pb=pb->next; } if(pa!=ahead)//a還沒(méi)有處理完,把a(bǔ)剩下的數(shù)字加到和上 {while(pa!=ahead) { sum=pa->data+carry; p=newlnode; p->data=sum%10000;p->next=chead->next; chead->next->prior=p; chead->next=p; p->prior=chead; carry=sum/10000; pa=pa->next; } } if(pb!=bhead)//b還沒(méi)有處理完,把b剩下的數(shù)字加到和上 {while(pb!=bhead) { sum=pb->data+carry; p=newlnode; p->data=sum%10000;p->next=chead->next; chead->next->prior=p; chead->next=p; p->prior=chead; carry=sum/10000; pb=pb->next; } } if(carry)//如果最后一位有進(jìn)位,就申請(qǐng)一個(gè)結(jié)點(diǎn)存儲(chǔ) {p=newlnode; p->data=carry; p->next=chead->next; chead->next->prior=p; chead->next=p; p->prior=chead; } putoutc(chead); returnOK;}intunsigndesub(lnodelist&ahead,lnodelist&bhead)//無(wú)符號(hào)長(zhǎng)整數(shù)的減法a比b大。{ intdiffe,borrow=0;//借位 lnode*pa,*pb,*chead; lnode*p; pa=ahead->next; pb=bhead->next; p=chead=newlnode;//頭結(jié)點(diǎn) p->data=0; p->next=p; p->prior=p; while(pa!=ahead&&pb!=bhead) { diffe=pa->data-borrow-pb->data; if(diffe<0){borrow=1;diffe+=10000;}elseborrow=0;p=newlnode;//存儲(chǔ)差 p->data=diffe;p->next=chead->next; chead->next->prior=p; chead->next=p; p->prior=chead; pa=pa->next; pb=pb->next; } if(pa!=ahead) {while(pa!=ahead) {diffe=pa->data-borrow; if(diffe<0){borrow=1;diffe+=10000;}elseborrow=0; p=newlnode;//存儲(chǔ)差 p->data=diffe;p->next=chead->next; chead->next->prior=p; chead->next=p; p->prior=chead; pa=pa->next; } } while(p->data==0&&p->next!=chead) { lnode*s; s=p;p=p->next; chead->next=p; p->prior=chead; deletes; } putoutc(chead); returnOK;}intadd(lnodelist&ahead,lnodelist&bhead){ inte,acount=0,bcount=0,q; e=ahead->data*bhead->data; cout<<"輸出運(yùn)算結(jié)果為:"<<endl; if(e==1) { if(ahead->data==-1) { cout<<"-";unsigndeadd(ahead,bhead); } elseunsigndeadd(ahead,bhead); } else { compare(ahead,bhead,q); if(q==1) { if(ahead->data==-1) { cout<<"-";unsigndesub(ahead,bhead); } elseunsigndesub(ahead,bhead); } else { if(ahead->data==1) { cout<<"-";unsigndesub(bhead,ahead); } elseunsigndesub(bhead,ahead); } }return0;}intsub(lnodelist&ahead,lnodelist&bhead){ inte,q; e=ahead->data*bhead->data; cout<<"輸出運(yùn)算結(jié)果為:"<<endl; if(e==-1) { if(ahead->data==-1) { cout<<"-";unsigndeadd(ahead,bhead); }else{unsigndeadd(ahead,bhead);} } else { compare(ahead,bhead,q); if(q==1) { if(ahead->data==-1) { cout<<"-";unsigndesub(ahead,bhead); } elseunsigndesub(ahead,bhead); } else { if(ahead->data==1) { cout<<"-";unsigndesub(bhead,ahead); } elseunsigndesub(bhead,ahead); } }return0;}intmul(lnodelist&ahead,lnodelist&bhead){ longmulti,carry;//進(jìn)位 inte; lnode*pa,*pb,*pc,*cnow; lnode*p,*chead; e=ahead->data*bhead->data; cout<<"輸出運(yùn)算結(jié)果為:"<<endl; if(e==-1){cout<<"-";} pa=ahead->next; pb=bhead->next; p=chead=newlnode;//頭結(jié)點(diǎn) p->data=0; p->next=p; p->prior=p; pc=cnow=chead; while(pb!=bhead) { carry=0; while(pa!=ahead) { multi=pa->data*pb->data+carry; carry=multi/10000; if(pc->prior==chead) { p=newlnode; p->data=multi%10000; p->next=chead->next; chead->next->prior=p; chead->next=p; p->prior=chead; } else { multi=pc->prior->data+multi%10000; pc->prior->data=multi%10000; carry=carry+multi/10000; } pc=pc->prior; pa=pa->next; } if(carry!=0) { p=newlnode; p->data=carry;p->next=chead->next; chead->next->prior=p; chead->next=p; p->prior=chead; } cnow=cnow->prior; pc=cnow; pa=ahead->next; pb=pb->next; } putoutc(chead); returnOK;}intdivput(lnode*chead){ lnode*s,*pr; pr=chead->prior; if(pr!=chead) {cout<<pr->data;pr=pr->prior;} while(pr!=chead) { if(pr->data==0) cout<<"0000"; elseif(pr->data>0&&pr->data<10) cout<<"000"; elseif(pr->data>=10&&pr->data<100) cout<<"00"; elseif(pr->data>=100&&pr->data<1000) cout<<"0"; cout<<pr->data; s=pr; pr=pr->prior; deletes; } cout<<endl; return0;}intdiv(lnodelist&ahead,lnodelist&bhead){ cout<<"輸出運(yùn)算結(jié)果為:"<<endl; lnode*pa,*pb,*s,*p; intborrow=0,diffe,count=0,q,acount=0,bcount=0,e;//借位 e=ahead->data*bhead->data; cout<<"輸出運(yùn)算結(jié)果為:"<<endl;cout<<"商為"; if(e==-1){cout<<"-";} while(borrow==0) { compare(ahead,bhead,q); if(q==0){borrow=1;cout<<++count<<",余數(shù)為0"<<endl;} elseif(q==-1){borrow=1;cout<<count<<",余數(shù)為";divput(ahead);} else { count=count+1; pa=ahead->next; pb=bhead->next; while(pa!=ahead&&pb!=bhead) { diffe=pa->data-borrow-pb->data; if(diffe<0){borrow=1;diffe=diffe+10000;} elseborrow=0; pa->data=diffe; pa=pa->next; pb=pb->next; } if(pa!=ahead) { while(pa!=ahead) { diffe=pa->data-borrow; if(diffe<0){borrow=1;diffe+=10000;}elseborrow=0; pa->data=diffe; pa=pa->next; } } p=pa->prior; while(p->data==0&&p->prior!=ahead) { s=p;p=p->prior; ahead->prior=p; p->next=ahead; deletes; } } }return0; }intxuan(int&c){ cout<<"*************請(qǐng)選擇要進(jìn)行的操作:***********"<<endl; cout<<"1.加法運(yùn)算2.減法運(yùn)算3.乘法運(yùn)算4.除法運(yùn)算"<<endl; cin>>c; return0;}intmain(){ intc,h;charb; lnodelistahead,bhead; inputa(ahead); inputb(bhead); do { xuan(c); switch(c) { case1:add(ahead,bhead);break; case2:sub(ahead,bhead);break; case3:mul(ahead,bhead);break; case4:div(ahead,bhead);break; } cout<<"***是否還要進(jìn)行其他運(yùn)算操作,是選擇Y,否選擇N;***"<<endl; cin>>b; if(b=='Y')h=1; elseh=0; }while(h); return0;}}四、運(yùn)行與測(cè)試1、遇到的問(wèn)題(1)剛開(kāi)始考慮進(jìn)位問(wèn)題過(guò)于簡(jiǎn)單,有許多的細(xì)節(jié)沒(méi)有注意,導(dǎo)致測(cè)試數(shù)據(jù)時(shí)多次出錯(cuò)。(2)在還沒(méi)有想清楚的時(shí)候就急于編寫(xiě)代碼,以至于寫(xiě)的程序無(wú)法運(yùn)行,所用到的運(yùn)算法則不對(duì)(3)開(kāi)始寫(xiě)程序時(shí)源程序沒(méi)有嚴(yán)格按單元模塊結(jié)構(gòu)編寫(xiě),可讀性較差。(4)由于初次進(jìn)行系統(tǒng)的程序設(shè)計(jì),層次結(jié)構(gòu)劃分不太合理,應(yīng)在以后的設(shè)計(jì)中強(qiáng)化此思維,逐漸與工程設(shè)計(jì)接軌。2、測(cè)試數(shù)據(jù):【測(cè)試數(shù)據(jù)】

(1)0;0;應(yīng)輸出“0”。

(2)-2345,6789;-7654,3211;應(yīng)輸出“-1,0000,0000”。

(3)-9999,9999;1,0000,0000,0000;應(yīng)輸出“9999,0000,0001”。

(4)1,0001,0001;-1,0001,0001;應(yīng)輸出“0”。

(5)1,0001,0001;-1,0001,0000;應(yīng)輸出“1”。

(6)-9999,9999,9999;-9999,9999,9999;應(yīng)輸出“1,9999,9999,9998”。

(7)1,0000,9999,9999;1;應(yīng)輸出“1,0001,0000,0000”。五、總結(jié)與心得經(jīng)過(guò)這幾天的編程,我發(fā)現(xiàn)我有好多的不足,給了我好多的啟發(fā),我感覺(jué)能變出一道題目來(lái),真的很開(kāi)心。在平常的學(xué)習(xí)中,沒(méi)有發(fā)現(xiàn)數(shù)據(jù)結(jié)構(gòu)有什么用處,于是也不太在意,但編完程序后,我知道了,其實(shí)基礎(chǔ)的東西才要掌握的更熟練。我也深深的感到,細(xì)節(jié)決定程序的好壞,一個(gè)程序,可能就一點(diǎn)小毛病但卻能使整個(gè)程序不能運(yùn)行,必須要一點(diǎn)一點(diǎn)的去查找,所以在以后的編程中,還要細(xì)心,不可以馬馬虎虎的,這樣對(duì)以后的編程是一個(gè)大麻煩。在以后我要好好學(xué)習(xí),努力專研這門(mén)專業(yè)。不斷的擴(kuò)大自己的知識(shí)和閱讀量。六、源代碼#include<iostream>usingnamespacestd;#include<stdio.h>#defineOK1;#defineFALSE0;typedefstructlnode{//結(jié)點(diǎn)結(jié)構(gòu)體 intdata; structlnode*next; structlnode*prior;}lnode,*lnodelist;intcompare(lnodelist&ahead,lnodelist&bhead,int&q)//比較a和b的大小{ lnode*pa,*pb; intbcount=0,acount=0; pa=ahead->next;pb=bhead->next; while(pa!=ahead) {acount++;pa=pa->next;} while(pb!=bhead) {bcount++;pb=pb->next;} if(acount>bcount)q=1; elseif(acount<bcount)q=-1; else { pa=ahead->prior; pb=bhead->prior; while((pa->data==pb->data)&&(pa->prior!=ahead)) {pa=pa->prior;pb=pb->prior;} if(pa->data>pb->data)q=1; elseif(pa->data<pb->data)q=-1; elseq=0; }return0;}intinputa(lnodelist&ahead)//輸入長(zhǎng)整數(shù)a{ lnode*p;charch;intafirst; cout<<"請(qǐng)輸入第一個(gè)無(wú)符號(hào)長(zhǎng)整型數(shù),要求每四位用逗號(hào)隔開(kāi)末尾為分號(hào):"<<endl; p=ahead=newlnode;//頭結(jié)點(diǎn) p->data=0; p->next=p; p->prior=p; cin>>afirst>>ch;//輸入第一個(gè)結(jié)點(diǎn)數(shù)據(jù) if(afirst<0) {ahead->data=-1;afirst=-afirst;} elseahead->data=1; p=newlnode; p->data=afirst; p->next=ahead; ahead->prior=p;ahead->next=p; p->prior=ahead; while(ch!=';') { cin>>afirst>>ch; p=newlnode; p->data=afirst; p->next=ahead->next; ahead->next->prior=p; ahead->next=p; p->prior=ahead; } returnOK;}intinputb(lnodelist&bhead)//輸入長(zhǎng)整數(shù)b{ lnode*p;charch;intbfirst; cout<<"請(qǐng)輸入第二個(gè)無(wú)符號(hào)長(zhǎng)整型數(shù),要求每四位用逗號(hào)隔開(kāi)末尾為分號(hào):"<<endl; p=bhead=newlnode;//頭結(jié)點(diǎn) p->data=0; p->next=p; cin>>bfirst>>ch;//輸入第一個(gè)結(jié)點(diǎn)數(shù)據(jù) if(bfirst<0) {bhead->data=-1;bfirst=-bfirst;} elsebhead->data=1; p=newlnode; p->data=bfirst; p->next=bhead;bhead->prior=p; bhead->next=p; p->prior=bhead; while(ch!=';') { cin>>bfirst>>ch; p=newlnode; p->data=bfirst; p->next=bhead->next; bhead->next->prior=p; bhead->next=p; p->prior=bhead; } returnOK;}voidputoutc(lnode*chead)//輸出結(jié)果{ lnode*s,*pr; pr=chead->next; if(pr!=chead) {cout<<pr->data;pr=pr->next;} while(pr!=chead) { if(pr->data==0) cout<<"0000"; elseif(pr->data>0&&pr->data<10) cout<<"000"; elseif(pr->data>=10&&pr->data<100) cout<<"00"; elseif(pr->data>=100&&pr->data<1000) cout<<"0"; cout<<pr->data; s=pr; pr=pr->next; deletes; }cout<<endl;}intunsigndeadd(lnodelist&ahead,lnodelist&bhead)//無(wú)符號(hào)長(zhǎng)整數(shù)的加法{ intsum,carry=0;//進(jìn)位 lnode*pa,*pb; lnode*p,*chead; pa=ahead->next; pb=bhead->next; p=chead=newlnode;//頭結(jié)點(diǎn) p->data=0; p->next=p; p->prior=p; while(pa!=ahead&&pb!=bhead) {sum=pa->data+pb->data+carry; p=newlnode; p->data=sum%10000; carry=sum/10000;p->next=chead->next; chead->next->prior=p; chead->next=p; p->prior=chead; pa=pa->next; pb=pb->next; } if(pa!=ahead)//a還沒(méi)有處理完,把a(bǔ)剩下的數(shù)字加到和上 {while(pa!=ahead) { sum=pa->data+carry; p=newlnode; p->data=sum%10000;p->next=chead->next; chead->next->prior=p; chead->next=p; p->prior=chead; carry=sum/10000; pa=pa->next; } } if(pb!=bhead)//b還沒(méi)有處理完,把b剩下的數(shù)字加到和上 {while(pb!=bhead) { sum=pb->data+carry; p=newlnode; p->data=sum%10000;p->next=chead->next; chead->next->prior=p; chead->next=p; p->prior=chead; carry=sum/10000; pb=pb->next; } } if(carry)//如果最后一位有進(jìn)位,就申請(qǐng)一個(gè)結(jié)點(diǎn)存儲(chǔ) {p=newlnode; p->data=carry; p->next=chead->next; chead->next->prior=p; chead->next=p; p->prior=chead; } putoutc(chead); returnOK;}intunsigndesub(lnodelist&ahead,lnodelist&bhead)//無(wú)符號(hào)長(zhǎng)整數(shù)的減法a比b大。{ intdiffe,borrow=0;//借位 lnode*pa,*pb,*chead; lnode*p; pa=ahead->next; pb=bhead->next; p=chead=newlnode;//頭結(jié)點(diǎn) p->data=0; p->next=p; p->prior=p; while(pa!=ahead&&pb!=bhead) { diffe=pa->data-borrow-pb->data; if(diffe<0){borrow=1;diffe+=10000;}elseborrow=0;p=newlnode;//存儲(chǔ)差 p->data=diffe;p->next=chead->next; chead->next->prior=p; chead->next=p; p->prior=chead; pa=pa->next; pb=pb->next; } if(pa!=ahead) {while(pa!=ahead) {diffe=pa->data-borrow; if(diffe<0){borrow=1;diffe+=10000;}elseborrow=0; p=newlnode;//存儲(chǔ)差 p->data=diffe;p->next=chead->next; chead->next->prior=p; chead->next=p; p->prior=chead; pa=pa->next; } } while(p->data==0&&p->next!=chead) { lnode*s; s=p;p=p->next; chead->next=p; p->prior=chead; deletes; } putoutc(chead); returnOK;}intadd(lnodelist&ahead,lnodelist&bhead){ inte,acount=0,bcount=0,q; e=ahead->data*bhead->data; cout<<"輸出運(yùn)算結(jié)果為:"<<endl; if(e==1) { if(ahead->data==-1) { cout<<"-";unsigndeadd(ahead,bhead); } elseunsigndeadd(ahead,bhead); } else { compare(ahead,bhead,q); if(q==1) { if(ahead->data==-1) { cout<<"-";unsigndesub(ahead,bhead); } elseunsigndesub(ahead,bhead); } else { if(ahead->data==1) { cout<<"-";unsigndesub(bhead,ahead); } elseunsigndesub(bhead,ahead); } }return0;}intsub(lnodelist&ahead,lnodelist&bhead){ inte,q; e=ahead->data*bhead->data; cout<<"輸出運(yùn)算結(jié)果為:"<<endl; if(e==-1) { if(ahead->data==-1) { cout<<"-";unsigndeadd(ahead,bhead); }else{unsigndeadd(ahead,bhead);} } else { compare(ahead,bhead,q); if(q==1) { if(ahead->data==-1) { cout<<"-";unsigndesub(ahead,bhead); } elseunsigndesub(ahead,bhead); } else { if(ahead->data==1) { cout<<"-";unsigndesub(bhead,ahead); } elseunsigndesub(bhead,ahead); } }return0;}intmul(lnodelist&ahead,lnodelist&bhead){ longmulti,carry;//進(jìn)位 inte; lnode*pa,*pb,*pc,*cnow; lnode*p,*chead; e=ahead->data*bhead->data; cout<<"輸出運(yùn)算結(jié)果為:"<<endl; if(e==-1){cout<<"-";} pa=ahead->next; pb=bhead->next; p=chead=newlnode;//頭結(jié)點(diǎn) p->data=0; p->next=p; p->prior=p; pc=cnow=chead; while(pb!=bhead) { carry=0; while(pa!=ahead) { multi=pa->data*pb->data+carry; carry=multi/10000; if(pc->prior==chead) { p=newlnode; p->data=multi%10000; p->next=chead->next; chead->next->prior=p; chead->next=p; p->prior=chead; } else { multi=pc->prior->data+multi%10000; pc->prior->data=multi%10000; carry=carry+multi/10000; } pc=pc->prior; pa=pa->next; } if(carry!=0) { p=newlnode; p->data=carry;p->next=chead->next; chead->next->prior=p; chead->next=p; p->prior=chead; } cnow=cnow->prior; pc=cnow; pa=ahead->next; pb=pb

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論