ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:1.30MB ,
资源ID:18021821      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18021821.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(大整数的四则运算高质量C语言程序资料讲解.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

大整数的四则运算高质量C语言程序资料讲解.docx

1、大整数的四则运算 高质量C语言程序资料讲解大整数的四则运算 高质量C语言程序 设计题目: 大整数的四则运算 1. 功能简介:编写出实现大整数之间相加,相减,相乘,相除的程序,并输出计算结构。 课程设计要求:采用模块化程序设计 源程序中应有足够的注释 必须上机调试通过 注重算法运用,优化存储效率与运算效率 需提交源程序(含有注释)及相关文件(数据或数据库文件); 提交设计报告书。2.总体结构: 数据初始化判断运算符号加法正整数非正整数转变为正整数减法转变为加法乘法除法转变为乘法和减法退出流程图:3 .概要设计:1)加法运算 利用两个整形数组分别存放两个数a和b的每一位的数值,最低位存放符号。如果

2、a和b同号,从最低为开始计算,如果有进位则保存在高一位,本为则减10,然后反序将计算后的各个位的数值保存在一个数组c并输出,如果a和b都是负数则在前面要输出负号,函数的返回值为c的位数。如果a和b异号,也即两个正整数相减,从最低位开始相减,如果要借位则本位加10再相减,高一位要减1,然后反序将计算后的各个位的数值保存在一个数组c并输出,在前面要输出相应的符号位。2)减法运算 可将减法运算转化为加法运算,只要将被减数的符号改变即可。3)乘法运算 符号存放在最低位,将其中一个数a的每一位分别乘以另一个数b的每一位,并将结果保存在数组c中,然后重复计算a的下一位跟b的每一位的乘积,把上一次计算保存在

3、c的值加上本次计算后的值,并保存在c自身中,直到a的最高位,最后输出符号和相应的计算结果。4)除法运算 利用乘法和减法,将除数分别乘以1到9,直到其值大于等于被除数的对应的数,然后被除数对应的数减去其乘积,保存在一个数组中,下一次循环把它归到被除数中继续做除法运算,最后得到余数并输出。4.函数功能:1. void init(int a,int b,int *p1,int *p2) 2. 功能说明:读入所要计算的数值,数据初始化3. int plus(int a,int b,int c,int m,int n) 4. 功能说明:两个正整数相加3. void change(int a,int b,

4、int m,int n) 功能说明:当两异号数相加时,改变其符号以符合加法运算5. int minus(int a,int b,int d,int m,int n) 6. 功能说明:两个正整数相减5. void minusfun(int a,int b,int d,int m,int n) 功能说明:判断两个异号数的相加方式7. int multi(int a,int b,int c,int m,int n) 8. 功能说明:两个正整数相乘7. void print(long c,int flag) 功能说明:打印带符号flag(1为负)的long c数组8. int write(long a

5、,int flag) 功能说明:将键盘敲入的数字按4位一组放入long a,且将符号放入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) 功能说明:比较数组a,b大小,first last分别为a的最高最低位11. int minusd(long a,int first,int last,long b,long c,int flag) 功能说明:a为被减数,first l

6、ast为a最高最低位,b为减数,c为差,flag为符号12. void div(long a,long b,long c,int fa) 功能说明:除法,a除以b的值放入c,fa为a符号13. void menu() 功能说明:打印菜单函数14. void main() 功能说明:主函数,调用其余函数,计算相应功能的值并输出。5.源程序:#include#include#include#define MAX 40 /可以修改,此时最大运算位数为四十位#define N 10 /此处应为最大位数除以4void init(int a,int b,int *p1,int *p2) /输入 int i

7、,j; char r,s; for(i=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; else a1=r-48; for(i=2;(r=getchar()!=n;i+) ai=r-48; *p1=i; printf(请输入处理的第二个数的值:); s=getchar(); if(s=45) b0=s; for(j=1;(s=getchar()!=n;j+) bj=s-48; else b1=s-48; for(j=2;(

8、s=getchar()!=n;j+) bj=s-48; *p2=j;int plus(int a,int b,int c,int m,int n) /加法运算 int dMAX=0,i,j,k; for(i=0;iMAX;i+) ci=0; if(a1=0) for(i=0;in;i+) ci=bi; return(i); if(b1=0) for(i=0;i0&j0;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

9、+bj; if(dk9) dk+1+;dk=dk-10; k+; j-; d0=a0+b0; c0=d0; if(dk=0) k-; for(i=1;k0;i+,k-) ci=dk; return(i);void change(int a,int b,int m,int n) /变号运算 int i,j; int cMAX; if(m=n&b0=45) for(i=1;im;i+) ci=ai; for(i=1,j=1;jn;i+,j+) ai=bj; for(i=1,j=1;jn;i+,j+) bi=cj; for(j=i;j=n&a0=45) a0=0; b0=45; return; in

10、t minus(int a,int b,int d,int m,int n) /减法运算 int cMAX=0,i,j,k; for(i=0;i0&j0;i-,j-,k+) if(ck0|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(int a,int b,int d,int m,int n) /判断是否两异号数相加 int i,j,f=0,g=0; if(a1=0

11、) if(b0!=0) printf(-); for(i=1;in;i+) printf(%d,bi); printf(n); return; if(b1=0) if(a0!=0) printf(-); for(i=1;im;i+) printf(%d,ai); printf(n); return; if(m=n) for(i=1;im;i+) if(aibi&a0=45) 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=

12、1;ij;i+) printf(%d,di); printf(n);return; else if(a0=45&b0=0) j=minus(b,a,d,n,m); for(i=1;ij;i+) printf(%d,di); printf(n); return; else j=minus(a,b,d,m,n); for(i=1;in&b0=45) j=minus(a,b,d,m,n); for(i=1;ij;i+) printf(%d,di); printf(n);return; if(mn&b0=45) change(a,b,m,n); printf(-); j=minus(a,b,d,n,m

13、); for(i=1;in&a0=45) change(a,b,m,n); printf(-); j=minus(a,b,d,m,n); for(i=1;ij;i+) printf(%d,di); printf(n); return; if(mn&a0=45) j=minus(b,a,d,n,m); for(i=1;ij;i+) printf(%d,di); printf(n); return; int multi(int a,int b,int c,int m,int n) /正整数乘法运算 int dMAX=0,eMAX=0,i,j,k,r,s,x,y; for(i=0;iMAX;i+)

14、ci=0; if(m0;i-,s+) for(r=0;r0;j-,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,0,y+1); else x=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

15、=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); else x=plus(c,d,e,y,y+1); for(r=0;r=0;i-) if(ci) break; if(flag) printf(-); printf(%4d,ci-); for(;i=0;i-) if(ci/1000) printf( %4ld,ci); else if(ci/100) printf( 0%3ld,ci); else if(ci/10) printf( 00

16、%2ld,ci); else printf( 000%1ld,ci); int write(long a,int flag) /将键盘敲入的数字按4位一组放入long a,且将符号放入flag char numN*4; char temp; int i,j,k; for(i=0;iN*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=

17、0;max_i-) if(bmax_i) break; for(i=0;i=max_i;i+) if(bi) for(j=first;j=0;len-) if(blen) break; if(first-last)=len) if(first-last)len) flag=1; else for(i=len;i=0;i-) if(afirst-kbi) flag=1; break; if(afirst-kbi) flag=0; break; k+; else flag=0; return flag;int minusd(long a,int first,int last,long b,long

18、 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=0;max-) if(bmax) break; for(i=0;i=max;i+) if(bi=0;len_a-) if(alen_a) break; k=len_a; while(compara(a,len_a,0,b) while(!compara(a,len_a,k,b) k-; ck=1; mul(c,k,k,b,result); whi

19、le(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-1;len_a=0;len_a-) if(alen_a) break; k=len_a; void menu() /菜单 printf(=大整数计算器=); printf(1.加法 2.减法 3.乘法 4.除法 0.退出n); printf(请从14中选择:); return;void main() /主函数 int flag; int max; int fa; int fb; long adN,bdN,cd2*N; int aMAX=0,bMAX=0,cMAX=0,d

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1