用鏈表實(shí)現(xiàn)大數(shù)相加減_第1頁
用鏈表實(shí)現(xiàn)大數(shù)相加減_第2頁
用鏈表實(shí)現(xiàn)大數(shù)相加減_第3頁
用鏈表實(shí)現(xiàn)大數(shù)相加減_第4頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、高級語言程序設(shè)計(jì)作業(yè)報(bào)告作業(yè)名稱 :大整數(shù)相加減學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院專業(yè)計(jì)算機(jī)軟件學(xué)生awell任課教師xxx提交日期一、問題描述實(shí)現(xiàn)兩個(gè)大整數(shù)的相加減二、系統(tǒng)設(shè)計(jì)1、結(jié)構(gòu)說明建立結(jié)構(gòu)類型node :struct nodeint num;/ 每個(gè)位數(shù)用一個(gè)int 類型表示,其中num>=0&&num<=9;node * next;/ 建立單向鏈表,連接相鄰的數(shù)字;;2、函數(shù)說明建立鏈表(將輸入的兩個(gè)數(shù)中較大的保存在fir 表頭的鏈表中) :void creatlist() bool falg=false;/ 標(biāo)記輸入的兩個(gè)整數(shù)是否需要進(jìn)行互換;if(arr1.s

2、ize()-falg1>arr2.size()-falg2)/falg1表示輸入的第一個(gè)整數(shù)前面的符號;falg=true;if(arr2.size()-falg2=arr1.size()-falg1)for(int i=0;i<arr2.size()-falg2;i+)if(opration='+') / 如果是實(shí)現(xiàn)加法,不用管建鏈表時(shí)的整數(shù)互換 falg=true;break;if(arr1i+falg1>arr2i+falg2) falg=true;break;if(i=arr1.size()-falg1-1) falg=false;if(falg)fo

3、r(int i=arr1.size()-1;i>=falg1;i-)node *s;s=new node;s->num=arr1i-'0'/從輸入的整數(shù)尾部逆向建立鏈表if(fir=NULL) fir=s;else efir->next=s;efir=s;efir->next=NULL;/ 尾結(jié)點(diǎn)的 next 一定要賦NULL,不然會出現(xiàn)錯(cuò)誤for(int i=arr2.size()-1;i>=falg2;i-)node *s;s=new node;s->num=arr2i-'0'if(sec=NULL) sec=s;else

4、 esec->next=s;esec=s;esec->next=NULL;elsefor(int i=arr2.size()-1;i>=falg2;i-)node *s;s=new node;s->num=arr2i-'0'if(fir=NULL) fir=s;else efir->next=s;efir=s;efir->next=NULL;for(int i=arr1.size()-1;i>=falg1;i-)node *s;s=new node;s->num=arr1i-'0'if(sec=NULL) sec=

5、s;else esec->next=s;esec=s;esec->next=NULL;if(opration='+') return;if(!falg) f=!f;/f表示整個(gè)運(yùn)算結(jié)果的正負(fù)void add() / 實(shí)現(xiàn)加法bool falg=false;/ 標(biāo)記是否進(jìn)位int num2=sec->num;for(node *head1=fir,*head2=sec;head1;head1=head1->next)/因?yàn)橐?fir 為表頭建立的鏈表所保存的整數(shù)較大,所以,以sec 為表頭建立的鏈表會先或者同時(shí)遍歷到表位int num1=head1->

6、;num;head1->num=(falg+num1+num2)%10;falg=(falg+num1+num2)/10;if(head2->next) / 判斷以 sec 為表頭的鏈表是否達(dá)到表尾head2=head2->next;num2=head2->num;else num2=0;if(f) cout<<"-"if(falg) cout<<1;int i=0;char *ans=new charsizeof(arr1)+sizeof(arr2);for(node *head1=fir;head1;head1=head1

7、->next)ansi=head1->num+'0'i+;for(i-;i>=0;i-)cout<<ansi;void sub() / 實(shí)現(xiàn)兩整數(shù)相減int num2=sec->num;bool falg=false;/ 判是否退位for(node *head1=fir,*head2=sec;head1;head1=head1->next)int num1=head1->num;head1->num=num1-num2-falg;if(num1-falg-num2<0)falg=true;head1->num=h

8、ead1->num+10;else falg=false;if(head2->next)head2=head2->next;num2=head2->num;else num2=0;int i=0;char *ans=new charsizeof(arr1)+sizeof(arr2);for(node *head1=fir;head1;head1=head1->next)ansi=head1->num+'0'i+;i-;falg=false;for(int j=0;j<=i;j+)if(ansj!='0') break;i

9、f(j=i)falg=true;cout<<0;return;if(f) cout<<"-"if(ansi='0') i-;for(;i>=0;i-)cout<<ansi;void dele() / 回收存node *tem;for(;fir;)tem=fir;fir=fir->next;delete tem;for(;sec;)tem=sec;sec=sec->next;delete tem;tem=fir=efir=sec=esec=NULL;開始輸入式子程序流程圖判操作實(shí)現(xiàn)減法實(shí)現(xiàn)加法輸出結(jié)果結(jié)束三

10、、程序測試1、設(shè)計(jì)測試用例0 + 01 + 110+11+1000000 +-1+11+-1-10 + 100100 + -10-1000000 + -000000000010-101-1010-11 - 77 - 15555555 - 55555-10 - -10-11 - -1-1 - -15515-1-8-8-1- - -666666662、程序測試結(jié)果0+0=01+1=210+1=111+10=1100000 +=-1+1=01+-1=0-10 + 100 = 90100 + -10 = 90-1000000 + -0000000000 = -000100000010-10=01-10

11、=-910-1=91-7=-67-1=65555555 - 55555 =0000000-10-10=0-11 - -1 = -10-1 - -15515 = 15514-1-8=7-8-1=-7- - -66666666 = -四、使用說明能正確實(shí)現(xiàn)兩個(gè)大整數(shù)(包括正負(fù))相加減的運(yùn)算五、收獲體會及建議完整代碼:#include <cstdio>#include <string>#include <cstring>#include <iostream>using namespacestd;struct nodeint num;node * nex

12、t;bool f,falg1,falg2;string arr1,arr2;char opration ;node * fir=NULL,* efir=NULL,* sec=NULL,* esec=NULL;void creatlist()bool falg=false;if(arr1.size()-falg1>arr2.size()-falg2)falg=true ;if(arr2.size()-falg2=arr1.size()-falg1)for(int i=0;i<arr2.size()-falg2;i+)if(opration ='+') falg=tru

13、e ;break;if(arr1i+falg1>arr2i+falg2) falg=true ;break;if(i=arr1.size()-falg1-1) falg=false;if(falg)for(int i=arr1.size()-1;i>=falg1;i-)node *s;s=new node;s->num=arr1i-'0'if(fir=NULL) fir =s;else efir->next=s;efir=s;efir->next=NULL;for(int i=arr2.size()-1;i>=falg2;i-)node *s

14、;s=new node;s->num=arr2i-'0'if(sec=NULL) sec=s;else esec->next=s;esec=s;esec->next=NULL;elsefor(int i=arr2.size()-1;i>=falg2;i-)node *s;s=new node;s->num=arr2i-'0'if(fir=NULL) fir =s;else efir->next=s;efir=s;efir->next=NULL;for(int i=arr1.size()-1;i>=falg1;i-)

15、node *s;s=new node;s->num=arr1i-'0'if(sec=NULL) sec=s;else esec->next=s;esec=s;esec->next=NULL;if(opration='+') return ;if(!falg) f=!f;void add()bool falg=false;int num2=sec->num;for(node *head1=fir,*head2=sec;head1;head1=head1->next) int num1=head1->num;head1->n

16、um=(falg+num1+num2)%10;falg=(falg+num1+num2)/10;if(head2->next) head2=head2->next;num2=head2->num;elsenum2=0;if(f) cout<<"-" ;if(falg) cout<<1;int i=0;char *ans=new charsizeof(arr1)+sizeof(arr2); for(node *head1=fir;head1;head1=head1->next)ansi=head1->num+'0&

17、#39;i+;for(i-;i>=0;i-)cout<<ansi;void sub()int num2=sec->num;bool falg=false;for(node *head1=fir,*head2=sec;head1;head1=head1->next)int num1=head1->num;head1->num=num1-num2-falg;if(num1-falg-num2<0)falg=true ;head1->num=head1->num+10;elsefalg=false;if(head2->next)hea

18、d2=head2->next;num2=head2->num;elsenum2=0;int i=0;char *ans=new charsizeof(arr1)+sizeof(arr2); for(node *head1=fir;head1;head1=head1->next)ansi=head1->num+'0'i+;i-;falg=false;for(int j=0;j<=i;j+)if(ansj!='0') break;if(j=i)falg=true ;cout<<0;return ;if(f) cout<

19、<"-" ;if(ansi='0') i-;for(;i>=0;i-)cout<<ansi;void dele()/ 回收存node *tem;for(;fir ;)tem=fir ;fir=fir->next;delete tem;for(;sec;)tem=sec;sec=sec->next;delete tem;tem=fir=efir=sec=esec=NULL;int main()cout<<"輸入算式,形如: "<<endl;cout<<"a + b or a - b"<<endl;while(cin&g

溫馨提示

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

評論

0/150

提交評論