版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 設(shè)計(jì)題目: 大整數(shù)的四則運(yùn)算 1. 功能簡介:編寫出實(shí)現(xiàn)大整數(shù)之間相加,相減,相乘,相除的程序,并輸出計(jì)算結(jié)構(gòu)。 課程設(shè)計(jì)要求:采用模塊化程序設(shè)計(jì) 源程序中應(yīng)有足夠的注釋 必須上機(jī)調(diào)試通過 注重算法運(yùn)用,優(yōu)化存儲(chǔ)效率與運(yùn)算效率 需提交源程序(含有注釋)及相關(guān)文件(數(shù)據(jù)或數(shù)據(jù)庫文件); 提交設(shè)計(jì)報(bào)告書。2. 總體結(jié)構(gòu): 數(shù)據(jù)初始化判斷運(yùn)算符號(hào)加法正整數(shù)非正整數(shù)轉(zhuǎn)變?yōu)檎麛?shù)減法轉(zhuǎn)變?yōu)榧臃ǔ朔ǔㄞD(zhuǎn)變?yōu)槌朔ê蜏p法退出流程圖:3 .概要設(shè)計(jì):1) 加法運(yùn)算 利用兩個(gè)整形數(shù)組分別存放兩個(gè)數(shù)a和b的每一位的數(shù)值,最低位存放符號(hào)。如果a和b同號(hào),從最低為開始計(jì)算,如果有進(jìn)位則保存在高一位,本為則減10,然
2、后反序?qū)⒂?jì)算后的各個(gè)位的數(shù)值保存在一個(gè)數(shù)組c并輸出,如果a和b都是負(fù)數(shù)則在前面要輸出負(fù)號(hào),函數(shù)的返回值為c的位數(shù)。如果a和b異號(hào),也即兩個(gè)正整數(shù)相減,從最低位開始相減,如果要借位則本位加10再相減,高一位要減1,然后反序?qū)⒂?jì)算后的各個(gè)位的數(shù)值保存在一個(gè)數(shù)組c并輸出,在前面要輸出相應(yīng)的符號(hào)位。2) 減法運(yùn)算 可將減法運(yùn)算轉(zhuǎn)化為加法運(yùn)算,只要將被減數(shù)的符號(hào)改變即可。3) 乘法運(yùn)算 符號(hào)存放在最低位,將其中一個(gè)數(shù)a的每一位分別乘以另一個(gè)數(shù)b的每一位,并將結(jié)果保存在數(shù)組c中,然后重復(fù)計(jì)算a的下一位跟b的每一位的乘積,把上一次計(jì)算保存在c的值加上本次計(jì)算后的值,并保存在c自身中,直到a的最高位,最后輸出
3、符號(hào)和相應(yīng)的計(jì)算結(jié)果。4) 除法運(yùn)算 利用乘法和減法,將除數(shù)分別乘以1到9,直到其值大于等于被除數(shù)的對(duì)應(yīng)的數(shù),然后被除數(shù)對(duì)應(yīng)的數(shù)減去其乘積,保存在一個(gè)數(shù)組中,下一次循環(huán)把它歸到被除數(shù)中繼續(xù)做除法運(yùn)算,最后得到余數(shù)并輸出。4. 函數(shù)功能:1. void init(int a,int b,int *p1,int *p2)2. 功能說明:讀入所要計(jì)算的數(shù)值,數(shù)據(jù)初始化3. int plus(int a,int b,int c,int m,int n) 4. 功能說明:兩個(gè)正整數(shù)相加3. void change(int a,int b,int m,int n) 功能說明:當(dāng)兩異號(hào)數(shù)相加時(shí),改變其符號(hào)以
4、符合加法運(yùn)算5. int minus(int a,int b,int d,int m,int n) 6. 功能說明:兩個(gè)正整數(shù)相減5. void minusfun(int a,int b,int d,int m,int n) 功能說明:判斷兩個(gè)異號(hào)數(shù)的相加方式7. int multi(int a,int b,int c,int m,int n) 8. 功能說明:兩個(gè)正整數(shù)相乘7. void print(long c,int flag) 功能說明:打印帶符號(hào)flag(1為負(fù))的long c數(shù)組8. int write(long a,int flag) 功能說明:將鍵盤敲入的數(shù)字按4位一組放入lo
5、ng a,且將符號(hào)放入flag9. void mul(long a,int first,int last,long b,long c) 功能說明:乘法,a的第last到first位乘以b,答案放到c10. int compara(long a,int first,int last,long b) 功能說明:比較數(shù)組a,b大小,first last分別為a的最高最低位11. int minusd(long a,int first,int last,long b,long c,int flag) 功能說明:a為被減數(shù),first last為a最高最低位,b為減數(shù),c為差,flag為符號(hào)12. vo
6、id div(long a,long b,long c,int fa) 功能說明:除法,a除以b的值放入c,fa為a符號(hào)13. void menu() 功能說明:打印菜單函數(shù)14. void main() 功能說明:主函數(shù),調(diào)用其余函數(shù),計(jì)算相應(yīng)功能的值并輸出。5.源程序:#include<iostream.h>#include<math.h>#include<stdio.h>#define max 40 /可以修改,此時(shí)最大運(yùn)算位數(shù)為四十位#define n 10 /此處應(yīng)為最大位數(shù)除以4void init(int a,int b,int *p1,int
7、*p2) /輸入int i,j;char r,s;for(i=0;i<max;i+)ai=0;bi=0;printf("請(qǐng)輸入處理的第一個(gè)數(shù)的值:");r=getchar();if(r=45) a0=r;for(i=1;(r=getchar()!='n'i+)ai=r-48;else a1=r-48;for(i=2;(r=getchar()!='n'i+)ai=r-48;*p1=i;printf("請(qǐng)輸入處理的第二個(gè)數(shù)的值:");s=getchar();if(s=45) b0=s;for(j=1;(s=getchar
8、()!='n'j+)bj=s-48;else b1=s-48;for(j=2;(s=getchar()!='n'j+)bj=s-48;*p2=j;int plus(int a,int b,int c,int m,int n) /加法運(yùn)算int dmax=0,i,j,k;for(i=0;i<max;i+) ci=0;if(a1=0) for(i=0;i<n;i+) ci=bi;return(i);if(b1=0) for(i=0;i<m;i+) ci=ai;return(i);for(i=m-1,j=n-1,k=1;i>0&&
9、;j>0;i-,j-,k+)dk=ai+bj+dk;if(dk>9)dk+1+;dk=dk-10;while(i>0) dk=dk+ai;if(dk>9) dk+1+;dk=dk-10;k+;i-;while(j>0) dk=dk+bj;if(dk>9) dk+1+;dk=dk-10;k+;j-;d0=a0+b0;c0=d0;if(dk=0) k-;for(i=1;k>0;i+,k-)ci=dk;return(i);void change(int a,int b,int m,int n) /變號(hào)運(yùn)算int i,j;int cmax;if(m<=n
10、&&b0=45)for(i=1;i<m;i+)ci=ai;for(i=1,j=1;j<n;i+,j+)ai=bj;for(i=1,j=1;j<n;i+,j+)bi=cj;for(j=i;j<max;j+)bj=0;return;if(m>=n&&a0=45)a0=0;b0=45;return;int minus(int a,int b,int d,int m,int n) /減法運(yùn)算int cmax=0,i,j,k;for(i=0;i<max;i+)di=0;for(i=m-1,j=n-1,k=1;i>0&&am
11、p;j>0;i-,j-,k+)if(ck<0|ai<bj)ck=ck+ai-bj;if(ck<0)ck+=10;ck+1-;else ck=ai-bj;while(i>0) ck=ck+ai;if(ck<0) ck+=10;ck+1-;k+;i-;ck=ai+ck;while(ck<=0&&k>0) k-;for(i=1;k>0;i+) di=ck-;return(i);void minusfun(int a,int b,int d,int m,int n) /判斷是否兩異號(hào)數(shù)相加int i,j,f=0,g=0;if(a1=
12、0) if(b0!=0) printf("-");for(i=1;i<n;i+)printf("%d",bi);printf("n"); return;if(b1=0) if(a0!=0)printf("-");for(i=1;i<m;i+)printf("%d",ai);printf("n");return;if(m=n)for(i=1;i<m;i+)if(ai<bi&&b0=45)|(ai>bi&&a0=45)
13、g=1;if(ai!=bi) f=1;if(f=0)printf("0n");return;if(g=1)change(a,b,m,n);printf("-");j=minus(a,b,d,n,m);for(i=1;i<j;i+) printf("%d",di);printf("n");return;else if(a0=45&&b0=0)j=minus(b,a,d,n,m);for(i=1;i<j;i+)printf("%d",di);printf("n&
14、quot;);return;elsej=minus(a,b,d,m,n); for(i=1;i<j;i+)printf("%d",di);printf("n");return;if(m>n&&b0=45)j=minus(a,b,d,m,n); for(i=1;i<j;i+) printf("%d",di);printf("n");return;if(m<n&&b0=45)change(a,b,m,n);printf("-"); j=minu
15、s(a,b,d,n,m);for(i=1;i<j;i+) printf("%d",di);printf("n");return;if(m>n&&a0=45)change(a,b,m,n); printf("-");j=minus(a,b,d,m,n);for(i=1;i<j;i+) printf("%d",di);printf("n");return;if(m<n&&a0=45)j=minus(b,a,d,n,m); for(i=1;i&l
16、t;j;i+) printf("%d",di);printf("n");return;int multi(int a,int b,int c,int m,int n) /正整數(shù)乘法運(yùn)算int dmax=0,emax=0,i,j,k,r,s,x,y;for(i=0;i<max;i+)ci=0;if(m<=n)for(i=m-1,s=1;i>0;i-,s+)for(r=0;r<max;r+)dr=0;er=0;for(j=n-1,k=1*s;j>0;j-,k+)dk=ai*bj+dk;if(dk>9) dk+1=dk+1+
17、dk/10;dk=dk%10;if(dk=0)k-;y=k;for(r=1;k>0;r+,k-)er=dk;for(r=1;r<max;r+)dr=er;if(s=1) x=plus(c,d,e,0,y+1);else x=plus(c,d,e,y,y+1);for(r=0;r<max;r+) cr=er;else if(m>n)for(j=n-1,s=1;j>0;j-,s+)for(r=0;r<max;r+)dr=0;er=0;for(i=m-1,k=1*s;i>0;i-,k+)dk=ai*bj+dk;if(dk>9) dk+1=dk+1+dk
18、/10;dk=dk%10;if(dk=0) k-;y=k;for(r=1;k>0;r+,k-)er=dk;for(r=1;r<max;r+)dr=er;if(s=1) x=plus(c,d,e,0,y+1);else x=plus(c,d,e,y,y+1);for(r=0;r<max;r+)cr=er;return(x);void print(long c,int flag) /輸出int i;for(i=n-1;i>=0;i-) if(ci) break; if(flag) printf("-"); printf("%4d",c
19、i-); for(;i>=0;i-) if(ci/1000) printf(" %4ld",ci); else if(ci/100) printf(" 0%3ld",ci); else if(ci/10) printf(" 00%2ld",ci); else printf(" 000%1ld",ci); int write(long a,int flag) /將鍵盤敲入的數(shù)字按4位一組放入long a,且將符號(hào)放入flagchar numn*4; char temp;int i,j,k;for(i=0;i&l
20、t;n*4;i+) numi=getchar();if(numi=10) i-;break;if(numi=45)flag=(flag+1)%2; i-;k=0;for(j=0;j<=i/2;j+) temp=numj;numj=numi-k;numi-k=temp;k+;k=1;for(j=0;j<=i;j+) switch(k)case 1:aj/4+=(long)(numj-48); k+; break;case 2:aj/4+=(long)(numj-48)*10; k+; break;case 3:aj/4+=(long)(numj-48)*100; k+; break;
21、case 4:aj/4+=(long)(numj-48)*1000; k=1; break; return flag;void mul(long a,int first,int last,long b,long c) /乘法 int i,j; int max_i; long temp; for(max_i=n-1;max_i>=0;max_i-) if(bmax_i) break; for(i=0;i<=max_i;i+) if(bi) for(j=first;j<=last;j+) temp=aj*bi; ci+j-first+=temp%10000; ci+j-first
22、+1+=(temp/10000)+(ci+j-first/10000); ci+j-first=ci+j-first%10000; int compara(long a,int first,int last,long b) /比較數(shù)組a,b大小int flag=2;int i;int k=0;int len; for(len=n-1;len>=0;len-) if(blen)break;if(first-last)>=len)if(first-last)>len) flag=1;elsefor(i=len;i>=0;i-)if(afirst-k>bi)flag=1
23、;break; if(afirst-k<bi) flag=0; break; k+;elseflag=0;return flag;int minusd(long a,int first,int last,long b,long c,int flag)int notchange;int i,k=0;int max; notchange=compara(a,first,last,b); if(notchange) for(i=last;i<=first;i+)if(ai<bk) ai+=10000;ai+1-;ci=ai-bk; k+;elseflag=(flag+1)%2; f
24、or(max=n-1;max>=0;max-)if(bmax)break;for(i=0;i<=max;i+) if(bi<alast+k)bi+=10000;bi+1-;ci=bi-alast+k;k+;return flag;void div(long a,long b,long c,int fa) /除法long resultn+1=0; int len_a;int k;int i;printf("n");print(a,fa); for(len_a=n-1;len_a>=0;len_a-) if(alen_a)break;k=len_a;wh
25、ile(compara(a,len_a,0,b) while(!compara(a,len_a,k,b) k-;ck=1;mul(c,k,k,b,result); while(compara(a,len_a,k,result) ck+;for(i=n-1;i>=0;i-) resulti=0;mul(c,k,k,b,result);ck-; for(i=n-1;i>=0;i-)resulti=0;mul(c,k,k,b,result); minusd(a,len_a,k,result,a,0); for(i=n-1;i>=0;i-) resulti=0;for(len_a=n
26、-1;len_a>=0;len_a-) if(alen_a)break;k=len_a; void menu() /菜單printf("=大整數(shù)計(jì)算器=");printf("1.加法2.減法3.乘法4.除法0.退出n");printf("請(qǐng)從14中選擇:");return;void main() /主函數(shù)int flag; int max; int fa; int fb; long adn,bdn,cd2*n;int amax=0,bmax=0,cmax=0,dmax=0;char s;int m,n,i,j;int *p1,*
27、p2;p1=&m;p2=&n;menu();s=getchar();getchar();while(1)switch(s)case '0':return;case '1':printf("格式為:a+bn");init(a,b,p1,p2); if(a1=0&&b1=0)printf("結(jié)果是:a+b=0n"); break;if(a0=b0)j=plus(a,b,c,m,n); printf("結(jié)果是:a+b=");if(c0!=0)printf("-&quo
28、t;);for(i=1;i<j;i+) printf("%d",ci);else printf("結(jié)果是:a+b=");minusfun(a,b,d,m,n);printf("n");break;case '2': printf("格式為:a-bn"); init(a,b,p1,p2); if(b0=0)b0=45;else if(b0=45)b0=0;if(a1=0&&b1=0) printf("結(jié)果是:a-b=0n"); break;if(a0=b0)j
29、=plus(a,b,c,m,n); printf("結(jié)果是:a-b=");if(c0!=0) printf("-");for(i=1;i<j;i+)printf("%d",ci);elseprintf("結(jié)果是:a-b=");minusfun(a,b,d,m,n);printf("n"); break;case '3': init(a,b,p1,p2); if(a1=0|b1=0) printf("結(jié)果是:0n");break;j=multi(a,b,c,m,n); printf("結(jié)果是:");if(a0=45&&b0=0)|(b0=45&&a0=0)printf("-");for(i=1;i<j;i+) printf("%d",ci);printf("n");break;case '4': flag=fa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 質(zhì)量檢測合同模板
- 2024年度平房區(qū)環(huán)境整治:建筑施工合同范本
- 開發(fā)商授權(quán)拆遷補(bǔ)償合同
- 2024年住家保姆工作協(xié)議
- 勞務(wù)協(xié)議書樣式
- 簡單工程承包協(xié)議范例
- 2024標(biāo)準(zhǔn)臨時(shí)用工合同樣本
- 2024年蘇州市租房合同范本
- 拼車服務(wù)協(xié)議示例
- 2024中介的買賣合同書范文
- 初中語文人教七年級(jí)上冊(cè)要拿我當(dāng)一挺機(jī)關(guān)槍使用
- 北京頌歌原版五線譜鋼琴譜正譜樂譜
- 病史采集和臨床檢查方法
- PSUR模板僅供參考
- 火力發(fā)電企業(yè)作業(yè)活動(dòng)風(fēng)險(xiǎn)分級(jí)管控清單(參考)
- 民法典合同編之保證合同實(shí)務(wù)解讀PPT
- 全國第四輪學(xué)科評(píng)估PPT幻燈片課件(PPT 24頁)
- 大氣污染控制工程課程設(shè)計(jì)-某廠酸洗硫酸煙霧治理設(shè)施設(shè)計(jì)
- 名牌包包網(wǎng)紅主播電商直播帶貨話術(shù)腳本
- 高考語文作文素材人物速遞——蘇炳添課件18張
- 蛋雞養(yǎng)殖場管理制度管理辦法
評(píng)論
0/150
提交評(píng)論