




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、高級語言程序設(shè)計作業(yè)報告作業(yè)名稱: 大整數(shù)相加減 學(xué) 院 計算機(jī)科學(xué)與工程學(xué)院 專 業(yè) 計算機(jī)軟件 學(xué)生姓名 awell 任課教師 xxx 提交日期 1、 問題描述 實(shí)現(xiàn)兩個大整數(shù)的相加減二、系統(tǒng)設(shè)計 1、結(jié)構(gòu)說明建立結(jié)構(gòu)類型 node:struct nodeint num;/每個位數(shù)用一個int類型表示,其中num>=0&&num<=9;node * next;/建立單向鏈表,連接相鄰的數(shù)字;; 2、函數(shù)說明建立鏈表(將輸入的兩個數(shù)中較大的保存在fir表頭的鏈表中):void creatlist()bool falg=false;/標(biāo)記輸入的兩個整數(shù)是否需要進(jìn)行互
2、換;if(arr1.size()-falg1>arr2.size()-falg2)/falg1表示輸入的第一個整數(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ù)互換falg=true;break;if(arr1i+falg1>arr2i+falg2) falg=true;break;if(i=arr1.size()-falg1-1) falg=false;i
3、f(falg)for(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)錯誤for(int i=arr2.size()-1;i>=falg2;i-)node *s;s=new node;s->num=arr2i-'0'if(sec=NULL) sec=
4、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-)node *s;s=new node;s->num=arr1i-'0'if(sec=NULL
5、) sec=s;else esec->next=s;esec=s;esec->next=NULL;if(opration='+') return;if(!falg) f=!f;/f表示整個運(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)橐詅ir為表頭建立的鏈表所保存的整數(shù)較大,所以,以sec為表頭建立的鏈表會先或者同時遍歷到表位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-&g
7、t;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=head1-&
8、gt;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;if(j=i)
9、falg=true;cout<<0;return;if(f) cout<<"-"if(ansi='0') i-;for(;i>=0;i-)cout<<ansi;void dele()/回收內(nèi)存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é)束三、程序測試 1
10、、設(shè)計測試用例0 + 01 + 110 + 11 + 10-1 + 11 + -1-10 + 100100 + -1010 - 101 - 1010 - 11 - 77 - 155555555555555555555555555555555555555555 - 555555555555555555555555555555555-10 - -10-11 - -1-1 - -15515-1 - -8-8 - -1-6666666666666666666666666666666666 - -6666666666666666666666666 2、程序測試結(jié)果0 + 0 = 01 + 1 = 210
11、 + 1 = 111 + 10 = 11-1 + 1 = 01 + -1 = 0-10 + 100 = 90100 + -10 = 9010 - 10 = 01 - 10 = -910 - 1 = 91 - 7 = -67 - 1 = 655555555555555555555555555555555555555555 - 555555555555555555555555555555555 = 55555555000000000000000000000000000000000-10 - -10 = 0-11 - -1 = -10-1 - -15515 = 15514-1 - -8 = 7-8
12、- -1 = -7-6666666666666666666666666666666666 - -6666666666666666666666666 = -6666666660000000000000000000000000四、使用說明 能正確實(shí)現(xiàn)兩個大整數(shù)(包括正負(fù))相加減的運(yùn)算5、 收獲體會及建議完整代碼:#include <cstdio>#include <string>#include <cstring>#include <iostream>using namespace std;struct nodeint num;node * next
13、;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=true;break;
14、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;s=new node
15、;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-)node *s;s=ne
16、w 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->num=(falg+num1+
17、num2)%10;falg=(falg+num1+num2)/10;if(head2->next) 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->next)ansi=head1->num+'0'i+;for(i-;i&
18、gt;=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;else falg=false;if(head2->next)head2=head2->nex
19、t;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;if(j=i)falg=true;cout<<0;return;if(f) cout<<"-"if(ansi='0') i-;for(;i>=0;i-)cout<<ansi;void dele()/回收內(nèi)存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 o
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司知識培訓(xùn)策劃方案
- 公司科技活動方案
- 公司烹飪活動方案
- 公司晨練活動策劃方案
- 公司結(jié)對活動方案
- 公司電競比賽活動方案
- 公司點(diǎn)餐活動策劃方案
- 公司整風(fēng)活動方案
- 公司競爭類游戲策劃方案
- 公司組織去海邊策劃方案
- 2024年財政部會計法律法規(guī)答題活動題目及答案一
- 《中藥調(diào)劑技術(shù)》課件-中藥調(diào)劑的概念、起源與發(fā)展
- 《數(shù)據(jù)中心節(jié)能方法》課件
- 2024年變電設(shè)備檢修工(高級)技能鑒定理論考試題庫-上(選擇題)
- 循環(huán)系統(tǒng)疾病智慧樹知到答案2024年哈爾濱醫(yī)科大學(xué)附屬第一醫(yī)院
- 2024-2030年中國激光水平儀行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 部編本小學(xué)語文六年級下冊畢業(yè)總復(fù)習(xí)教案
- JB∕T 11864-2014 長期堵轉(zhuǎn)力矩電動機(jī)式電纜卷筒
- 小兒氨酚黃那敏顆粒的藥動學(xué)研究
- 生態(tài)環(huán)境行政處罰自由裁量基準(zhǔn)
- 長沙市開福區(qū)2024屆六年級下學(xué)期小升初數(shù)學(xué)試卷含解析
評論
0/150
提交評論