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

上传人:b****3 文档编号:1437398 上传时间:2022-10-22 格式:DOCX 页数:28 大小:1.35MB
下载 相关 举报
大整数的四则运算 高质量C语言程序.docx_第1页
第1页 / 共28页
大整数的四则运算 高质量C语言程序.docx_第2页
第2页 / 共28页
大整数的四则运算 高质量C语言程序.docx_第3页
第3页 / 共28页
大整数的四则运算 高质量C语言程序.docx_第4页
第4页 / 共28页
大整数的四则运算 高质量C语言程序.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

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

《大整数的四则运算 高质量C语言程序.docx》由会员分享,可在线阅读,更多相关《大整数的四则运算 高质量C语言程序.docx(28页珍藏版)》请在冰豆网上搜索。

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

大整数的四则运算高质量C语言程序

   

设计题目:

 大整数的四则运算     

 

1.功能简介:

编写出实现大整数之间相加,相减,相乘,相除的程序,并输出计算结构。

课程设计要求:

采用模块化程序设计

        源程序中应有足够的注释

      必须上机调试通过

     注重算法运用,优化存储效率与运算效率

       需提交源程序(含有注释)及相关文件(数据或数据库文件);

     提交设计报告书。

2.总体结构:

 

流程图:

3。

概要设计:

1)加法运算

利用两个整形数组分别存放两个数a和b的每一位的数值,最低位存放符号。

如果a和b同号,从最低为开始计算,如果有进位则保存在高一位,本为则减10,然后反序将计算后的各个位的数值保存在一个数组c并输出,如果a和b都是负数则在前面要输出负号,函数的返回值为c的位数。

如果a和b异号,也即两个正整数相减,从最低位开始相减,如果要借位则本位加10再相减,高一位要减1,然后反序将计算后的各个位的数值保存在一个数组c并输出,在前面要输出相应的符号位.

2)减法运算

可将减法运算转化为加法运算,只要将被减数的符号改变即可。

3)乘法运算

符号存放在最低位,将其中一个数a的每一位分别乘以另一个数b的每一位,并将结果保存在数组c中,然后重复计算a的下一位跟b的每一位的乘积,把上一次计算保存在c的值加上本次计算后的值,并保存在c自身中,直到a的最高位,最后输出符号和相应的计算结果.

4)除法运算

   利用乘法和减法,将除数分别乘以1到9,直到其值大于等于被除数的对应的数,然后被除数对应的数减去其乘积,保存在一个数组中,下一次循环把它归到被除数中继续做除法运算,最后得到余数并输出.

4.函数功能:

1.void init(int a[],int b[],int*p1,int*p2)ﻩ

2.功能说明:

读入所要计算的数值,数据初始化

3.int plus(inta[],int b[],intc[],intm,intn)  

4.功能说明:

两个正整数相加

3. void change(inta[],int b[],intm,int n)

功能说明:

当两异号数相加时,改变其符号以符合加法运算

5.int minus(int a[],int b[],int d[],intm,intn)

6.功能说明:

两个正整数相减

5.voidminusfun(inta[],intb[],intd[],intm,intn)ﻩ

功能说明:

判断两个异号数的相加方式

7.intmulti(inta[],intb[],int c[],int m,intn)

8.功能说明:

两个正整数相乘

7.void print(longc[],int flag)

功能说明:

打印带符号flag(1为负)的long c[]数组

8。

intwrite(longa[],intflag)

功能说明:

将键盘敲入的数字按4位一组放入longa[],且将符号放入flag

9.voidmul(longa[],intfirst,intlast,longb[],longc[])   

功能说明:

乘法,a的第last到first位乘以b,答案放到c

10.intcompara(longa[],intfirst,int last,longb[])  

功能说明:

比较数组a,b大小,firstlast分别为a的最高最低位

11。

intminusd(long a[],intfirst,intlast,longb[],longc[],int flag)  

功能说明:

a为被减数,first last为a最高最低位,b为减数,c为差,flag为符号

12.voiddiv(longa[],longb[],longc[],intfa)  

功能说明:

除法,a除以b的值放入c,fa为a符号

13。

voidmenu() 

功能说明:

打印菜单函数

14. void main()   

功能说明:

主函数,调用其余函数,计算相应功能的值并输出。

5。

源程序:

#include〈iostream。

h>

#include<math.h>

#include〈stdio.h>

#defineMAX40  //可以修改,此时最大运算位数为四十位

#define N10  //此处应为最大位数除以4

voidinit(int a[],int b[],int*p1,int *p2)//输入

inti,j;

ﻩcharr,s;

ﻩfor(i=0;i〈MAX;i++)

a[i]=0;

ﻩb[i]=0;

ﻩ}

ﻩprintf(”请输入处理的第一个数的值:

");

ﻩr=getchar();

if(r==45)

{

ﻩa[0]=r;

ﻩfor(i=1;(r=getchar())!

='\n';i++)

a[i]=r—48;

ﻩelse

ﻩﻩa[1]=r-48;

ﻩfor(i=2;(r=getchar())!

='\n';i++)

ﻩa[i]=r—48;

ﻩ}

ﻩ*p1=i;

printf(”请输入处理的第二个数的值:

");

s=getchar();

ﻩif(s==45) 

ﻩb[0]=s;

for(j=1;(s=getchar())!

=’\n';j++)

ﻩb[j]=s-48;

ﻩelse 

ﻩ{

ﻩﻩb[1]=s-48;

ﻩﻩfor(j=2;(s=getchar())!

='\n';j++)

ﻩb[j]=s—48;

ﻩ}

*p2=j;

}

intplus(inta[],intb[],intc[],int m,int n) //加法运算

intd[MAX]={0},i,j,k;

ﻩfor(i=0;i<MAX;i++) c[i]=0;

if(a[1]==0)

ﻩ{

ﻩfor(i=0;i<n;i++) c[i]=b[i];

ﻩreturn(i);

ﻩ}

ﻩif(b[1]==0)

ﻩﻩfor(i=0;i

ﻩﻩreturn(i);

ﻩ}

for(i=m-1,j=n—1,k=1;i〉0&&j〉0;i—-,j—-,k++)

{

ﻩd[k]=a[i]+b[j]+d[k];

if(d[k]>9)

ﻩ{

ﻩﻩd[k+1]++;d[k]=d[k]—10;}

ﻩ}

while(i〉0)

{

ﻩﻩd[k]=d[k]+a[i];

if(d[k]>9)

{

ﻩd[k+1]++;d[k]=d[k]-10;

ﻩ}

ﻩk++;

ﻩi—-;

ﻩ}

while(j>0)

ﻩ{

ﻩﻩd[k]=d[k]+b[j];

if(d[k]>9)

ﻩ{

ﻩd[k+1]++;d[k]=d[k]-10;

ﻩk++;

ﻩj—-;

ﻩ}ﻩ

d[0]=a[0]+b[0];

c[0]=d[0];

ﻩif(d[k]==0)

ﻩk——;

ﻩfor(i=1;k>0;i++,k--)

ﻩﻩc[i]=d[k];

return(i);

voidchange(inta[],intb[],intm,intn) //变号运算

int i,j;

ﻩintc[MAX];

ﻩif(m<=n&&b[0]==45)

ﻩ{

ﻩfor(i=1;i〈m;i++)

ﻩﻩc[i]=a[i];

for(i=1,j=1;j<n;i++,j++)

ﻩﻩa[i]=b[j];

ﻩfor(i=1,j=1;j<n;i++,j++)

ﻩb[i]=c[j];

ﻩfor(j=i;j<MAX;j++)

ﻩﻩb[j]=0;

ﻩreturn;

}

ﻩif(m>=n&&a[0]==45)

a[0]=0;

ﻩb[0]=45;

ﻩreturn;

ﻩ}

}

intminus(inta[],intb[],intd[],intm,intn)//减法运算

{

ﻩintc[MAX]={0},i,j,k;

ﻩfor(i=0;i〈MAX;i++)

ﻩd[i]=0;

ﻩfor(i=m-1,j=n—1,k=1;i〉0&&j〉0;i-—,j--,k++)ﻩ

ﻩ{

if(c[k]<0||a[i]〈b[j])

ﻩ{

ﻩﻩc[k]=c[k]+a[i]-b[j];

ﻩif(c[k]<0)

ﻩ{

ﻩﻩﻩc[k]+=10;

ﻩﻩc[k+1]—-;

ﻩ}

ﻩelsec[k]=a[i]-b[j];

ﻩwhile(i>0)

ﻩ{

ﻩﻩc[k]=c[k]+a[i];

if(c[k]<0)

ﻩ{

c[k]+=10;

ﻩﻩc[k+1]—-;

ﻩ}

k++;i--;

}

c[k]=a[i]+c[k];ﻩ

while(c[k]<=0&&k>0) 

ﻩﻩk--;

ﻩfor(i=1;k〉0;i++)

ﻩd[i]=c[k——];

ﻩreturn(i);

}

voidminusfun(inta[],int b[],int d[],intm,int n)  //判断是否两异号数相加

{

ﻩinti,j,f=0,g=0;

if(a[1]==0)

ﻩ{

ﻩif(b[0]!

=0)printf("-");

ﻩfor(i=1;i

ﻩﻩprintf(”%d”,b[i]);

ﻩﻩprintf("\n"); 

return;

}

ﻩif(b[1]==0)

{

ﻩif(a[0]!

=0)

ﻩﻩprintf("-”);

for(i=1;i<m;i++)

ﻩprintf("%d",a[i]);

printf(”\n");

ﻩreturn;

}

ﻩif(m==n)

ﻩ{

ﻩfor(i=1;i<m;i++)

ﻩ{

ﻩﻩif((a[i]〈b[i]&&b[0]==45)||(a[i]>b[i]&&a[0]==45))

ﻩﻩﻩg=1;

ﻩﻩif(a[i]!

=b[i])f=1;

if(f==0)

ﻩ{

ﻩﻩprintf("0\n");

ﻩﻩreturn;

if(g==1)

ﻩ{

ﻩﻩchange(a,b,m,n);

printf("—");

ﻩﻩj=minus(a,b,d,n,m);

ﻩfor(i=1;i

ﻩprintf(”\n");return;

elseif(a[0]==45&&b[0]==0)

{

ﻩj=minus(b,a,d,n,m);

for(i=1;i<j;i++)

ﻩﻩprintf("%d",d[i]);

ﻩprintf("\n”);

ﻩreturn;

ﻩ}

else

{

ﻩj=minus(a,b,d,m,n);

ﻩﻩfor(i=1;i

ﻩﻩprintf(”%d”,d[i]);

printf("\n”);return;

}

if(m>n&&b[

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机

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

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