版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、设计题目:大整数的四则运算1. 功能简介: 编写出实现大整数之间相加,相减,相乘,相除的程序,并输出计算 结构。课程设计要求:采用模块化程序设计源程序中应有足够的注释必须上机调试通过注重算法运用,优化存储效率与运算效率需提交源程序(含有注释)及相关文件(数据或数据库文件); 提交设计报告书。2.总体结构:数据初判断运算符号加法减法乘法除法退出正整数非正整转变为转变为转变为流程图:3 概要设计:1 )加法运算利用两个整形数组分别存放两个数a和b的每一位的数值,最低位存放符号。如果a和b同号,从最低为开始计算,如果有进位则保存在高一位,本为则减10,然后反序将计算后的各个位的数值保存在一个数组c并
2、输出,如果a和b都是负数则在前面要输出负号,函数的返回值为 c的位数。如果a和b异号,也即两个正整数相减,从最低位开始相减,如 果要借位则本位加10再相减,高一位要减1,然后反序将计算后的各个位的数值保存在一个数组c并输出,在前面要输出相应的符号位。2)减法运算可将减法运算转化为加法运算,只要将被减数的符号改变即可。3 )乘法运算符号存放在最低位,将其中一个数 a的每一位分别乘以另一个数b的每一位,并将结果保存在数组c中,然后重复计算 a的下一位跟b的每一位的乘积,把上一次计算保存在c的值加上本次计算后的值,并保存在c自身中,直到a的最高位,最后输出符号和相应的计算结果。4 )除法运算利用乘法
3、和减法,将除数分别乘以1到9,直到其值大于等于被除数的对应的数,然后被除数对应的数减去其乘积,保存在一个数组中,下一次循环把它归到被除数中继续做除法 运算,最后得到余数并输出。4. 函数功能:1. void init(int a,int b,int *p1,int *p2)2. 功能说明:读入所要计算的数值,数据初始化3. i nt plus(int a,int b,int c,int m,int n)4. 功能说明:两个正整数相加3. void cha nge(i nt a,i nt b,i nt m,i nt n)功能说明:当两异号数相加时,改变其符号以符合加法运算5. i nt minu
4、s(int a,int b,int d,int m,int n)6. 功能说明:两个正整数相减5. void minusfun (i nt a,i nt b,i nt d,i nt m,i nt n)功能说明:判断两个异号数的相加方式7. i nt multi(int a,int b,int c,int m,int n)8. 功能说明:两个正整数相乘7. void prin t(l ong c,i nt flag)功能说明:打印带符号flag ( 1为负)的long c数组8. int write(lo ng a,i nt flag)功能说明:将键盘敲入的数字按4位一组放入long a,且将符
5、号放入flag9. void mul(l ong a,i nt first,i nt last,l ong b,l ong c)功能说明:乘法,a的第last至到 first 位乘以b,答案放到c10. int compara(lo ng a,i nt first, int last,l ong b)功能说明:比较数组a,b大小,first last 分别为a的最高最低位11. int minu sd(l ong a,i nt first,i nt last,l ong b,l ong c,i nt flag)功能说明:a为被减数,first last为a最咼最低位,b为减数,c为差,flag
6、为符号12. void div(long a,long b,long c,int fa)功能说明:除法,a除以b的值放入c,fa为a符号13. void menu()功能说明:打印菜单函数14. void mai n()功能说明:主函数,调用其余函数,计算相应功能的值并输出。5. 源程序:#in clude#in clude#in clude#defi ne MAX 40 /可以修改,此时最大运算位数为四十位#defi ne N 10/此处应为最大位数除以4void in it(i nt a,i nt b,i nt *p1, int *p2)/输入int i,j;char r,s;for(i=
7、0;iMAX;i+)ai=0;bi=0;printf(”请输入处理的第一个数的值: );r=getchar();if(r=45)a0=r;for(i=1;(r=getchar()!=n;i+)ai=r-48;elsea1=r-48;for(i=2;(r=getchar()!=n;i+)ai=r-48;*p1=i;printf(”请输入处理的第二个数的值:”);s=getchar();if(s=45)bO=s;for(j=1;(s=getchar()!=n;j+) bj=s-48;elseb1=s-48;for(j=2;(s=getchar()!=n;j+) bj=s-48;*p2=j;加法运算
8、int plus(int a,int b,int c,int m,int n) /int dMAX=O,i,j,k;for(i=0;iMAX;i+) ci=0;if(a1=0)for(i=0;i n ;i+) ci=bi;return(i);if(b1=0)for(i=0;i0&jO;i-,j-,k+)dk=ai+bj+dk;if(dk9)dk+1+;dk=dk-10;while(i0)dk=dk+ai;if(dk9) dk+1+;dk=dk-10;k+;i-;while(j0)dk=dk+bjif(dk9) dk+1+;dk=dk-10; k+;j-;dO=aO+bO;cO=dO;if(dk
9、=0)k-;for(i=1;k0;i+,k-)ci=dk;return(i);变号运算void cha nge(i nt a,i nt b,i nt m,i nt n) /int i,j;int cMAX;if(m=n&b0=45)for(i=1;im;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=n&a0=45)a0=0;b0=45;return;int minu s(i nt a,i nt b,i nt d,i nt m,i nt n) /int cMAX=O,i,j,k;for
10、(i=0;i0&jO;i-,j-,k+) if(ckO|aibj)ck=ck+ai-bj;if(ck0)ck=ck+ai;if(ck0)ck+=10;ck+1-;k+;i-;ck=ai+ck;while(ck0)k-;for(i=1;k0;i+)di=ck-;return(i);void minusfun (i nt a,i nt b,i nt d,i nt m,i nt n) / int i,j,f=O,g=O;if(a1=0)if(b0!=0) pri ntf(-);for(i=1;i n ;i+)prin tf(%d,bi);prin tf(n);减法运算判断是否两异号数相加return
11、;if(b1=0)if(aO!=O)prin tf(-);for(i=1;im;i+)prin tf(%d,ai);prin tf(n);return;if(m=n)for(i=1;im;i+)if(a ibi&a0=45) g=1;if(ai!=bi) f=1;if(f=0)prin tf(0n);return;if(g=1)cha nge(a,b, m,n);prin tf(-);j=mi nu s(a,b,d, n, m);for(i=1;ij;i+) pri ntf(%d,di);prin tf(n);return;else if(a0=45&b0=0)j=mi nu s(b,a,d,
12、 n, m);for(i=1;ij;i+)prin tf(%d,di);prin tf(n);return;elsej=mi nu s(a,b,d,m, n);for(i=1;i n&b0=45)j=mi nu s(a,b,d,m, n); for(i=1;ij;i+) pri ntf(%d,di); prin tf(n);return;if(m n&b0=45)cha nge(a,b, m,n);prin tf(-);j=mi nu s(a,b,d, n, m);for(i=1;i n&a0=45)cha nge(a,b, m,n);prin tf(-);j=mi nu s(a,b,d,m,
13、 n);for(i=1;ij;i+)prin tf(%d,di);prin tf(n);return;if(m n&a0=45)j=mi nu s(b,a,d, n, m);for(i=1;ij;i+)prin tf(%d,di);prin tf(n);return;正整数乘法运算int multi(int a,int b,int c,int m,int n) /int dMAX=O,eMAX=O,i,j,k,r,s,x,y; for(i=0;iMAX;i+)ci=O;if(m0;i_,s+)for(r=0;r0;j-,k+)dk=ai*bj+dk;if(dk9) dk+1=dk+1+dk/1
14、0;dk=dk%10; if(dk=0)k-;y=k;for(r=1;k0;r+,k-)er=dk;for(r=1;rMAX;r+)dr=er;if(s=1)x=plus(c,d,e,0,y+1);elsex=plus(c,d,e,y,y+1);for(r=0;rn)for(j=n _1,s=1;j0;j_,s+)for(r=0;r0;i-,k+)dk=ai*bj+dk;if(dk9)dk+1=dk+1+dk/10; dk=dk%10;if(dk=0)k-;y=k;for(r=1;k0;r+,k-)er=dk;for(r=1;rMAX;r+)dr=er;if(s=1)x=plus(c,d,e,
15、0,y+1);elsex=plus(c,d,e,y,y+1);for(r=0;r=0;i-)if(ci)break;if(flag)prin tf(-);prin tf(%4d,ci-);for(;i=0;i_)if(ci/1OOO)printf( %4ld,ci);else if(ci/100)printf( 0%3ld,ci);else if(ci/10)printf( 00%2ld,ci);elseprintf( 000%1ld,ci);且将符号int write(long a,int flag) /将键盘敲入的数字按4位一组放入long a,放入flagchar numN*4;char
16、 temp;int i,j,k;for(i=0;iN*4;i+)nu mi=getchar(); if(n umi=10)I-;break;if(n umi=45)flag=(flag+1)%2;I-;k=0;for(j=0;j=i/2;j+)temp=nu mj;nu mj=nu mi-k;nu mi-k=temp;k+;k=1;for(j=0;j=0;max_i-)if(bmax_i)break;for(i=0;i=max_i;i+)if(bi)for(j=first;j=0;le n-)if(ble n)break;if(first-last)=le n)if(first-last)le
17、 n)flag=1;elsefor(i=le n; i=0;i-)if(afirst-kbi)flag=1;break;if(afirst-kbi)flag=0;break;k+;elseflag=0;returnflag;int minu sd(l ong a,i nt first, int last,l ong b,lo ng c,i nt flag)int no tcha nge;int i,k=0;int ma x;no tcha nge=compara(a,first,last,b);if(no tcha nge)for(i=last;i=first;i+)if(ai=0;max-)
18、 if(bmax)break;for(i=0;i=max;i+)if(bi=0;le n_a_) if(alen_a)break;k=le n_a;while(compara(a,le n_a,0,b)while(!compara(a,le n_a,k,b)k-;ck=1;mul(c,k,k,b,result);while(compara(a,le n_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);minu sd(a
19、,le n_a,k,result,a,O);for(i=N-1;i=0;i-)resulti=0;for(le n_a=N_1;le n_a=O;le n_a_)if(alen_a)break;k=le n_a;void menu() / 菜单prin tf(”=大 整 数 计 算 器=);printf(1.加法 2.减法 3.乘法 4.除法 0.退出n”);printf( 请从14中选择:);return;void ma in () / 主函数int flag;int max;int fa;int fb;long adN,bdN,cd2*N;int aMAX=0,bMAX=0,cMAX=0,
20、dMAX=0;char s;int m, n,i,j;int *p1,*p2;p1=&m;p2=&n;menu();s=getchar();getchar();while(1)switch(s)case O:return;case 1:printf(”格式为:a+bn”);ini t(a,b,p1,p2);if(a1=0&b1=0)printf(结果是:a+b=0n); break;if(a0=b0)j=plus(a,b,c,m, n);printf(结果是:a+b=);if(c0!=0)prin tf(-);for(i=1;ij;i+)prin tf(%d,ci);elseprintf(结果
21、是:a+b=);mi nusfun (a,b,d,m, n);prin tf(n);break;case 2:printf(格式为:a-bn);ini t(a,b,p1,p2);if(b0=0)b0=45;else if(b0=45)b0=0;if(a1=0&b1=0)printf(结果是:a-b=0n); break;if(aO=bO)j=plus(a,b,c,m, n);printf(结果是:a-b=);if(cO!=O)prin tf(-);for(i=1;ij;i+)prin tf(%d,ci);elseprintf(结果是:a-b=);mi nusfun (a,b,d,m, n);p
22、rin tf(n);break;case 3:ini t(a,b,p1,p2);if(a1=0|b1=0)printf( 结果是:0n);break;j=multi(a,b,c,m, n);printf(结果是:);if(a0=45&b0=0)|(b0=45&a0=0) prin tf(-);for(i=1;ij;i+)prin tf(%d,ci);prin tf(n);break;case 4:flag=fa=fb=0;for(max=0;max菊的计严:W7RSPI!87SS36FP3fi密数计尊器=3n 十亠 1丿一个鞍眇直;2 37E9834027E90B2374G09 輸人楚理的第二不嫌的直:8 49B5B7204376B59 JB:;28739634T050985771741412
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中化学选择性必修一第一章 综合检测
- 传承环境设计
- 金融理财投资科普
- 《跨学科实践:为节约能源设计方案》课件
- 门票设计模板应用规范
- 课桌教学设计模板
- 手工设计汇报
- 班干部竞选自我介绍
- 郫县商业计划书
- 服装品牌设计策划
- 第六章-初始适航管理-民用航空器适航管理教学课件
- DB44∕T 2830-2026 艾滋病病毒感染者及艾滋病患者手术室管理规范
- 黑龙江省哈尔滨市2025届中考物理试卷(含答案)
- 2026年中国中车集团软件岗面试常见问题及嵌入式系统考点
- 储能行业压缩空气储能电站经济性调研报告
- 长租公寓盈利模式与成本结构优化
- 2026年自贡市自流井区社区工作者招聘笔试参考试题及答案解析
- 2026年初级经济师之初级经济师工商管理从业资格考试真题及参考答案详解AB卷
- 雨课堂学堂在线学堂云审计法律研究与案例(西南政法大学)单元测试考核答案
- 2026安徽合肥市发展和改革委员会上半年招聘事业单位工作人员20人考试备考试题及答案解析
- 2026年危险化学品重点县专家指导服务自查表
评论
0/150
提交评论