大整数的四则运算 高质量C语言程序Word下载.docx
《大整数的四则运算 高质量C语言程序Word下载.docx》由会员分享,可在线阅读,更多相关《大整数的四则运算 高质量C语言程序Word下载.docx(28页珍藏版)》请在冰豆网上搜索。
读入所要计算的数值,数据初始化
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'
;
ﻩ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';
ﻩ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<
m;
i++) c[i]=a[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;
ﻩﻩ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&&
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<
n;
ﻩﻩprintf(”%d”,b[i]);
ﻩﻩprintf("
\n"
return;
ﻩif(b[1]==0)
ﻩif(a[0]!
=0)
ﻩﻩprintf("
-”);
for(i=1;
m;
i++)
ﻩprintf("%d",a[i]);
printf(”\n"
ﻩreturn;
ﻩif(m==n)
ﻩfor(i=1;
i<m;
ﻩ{
ﻩﻩ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);
j;
i++)printf("%d"
d[i]);
ﻩprintf(”\n");
return;
elseif(a[0]==45&&
b[0]==0)
ﻩj=minus(b,a,d,n,m);
for(i=1;
i<j;
ﻩﻩprintf("
%d"
,d[i]);
ﻩprintf("
\n”);
ﻩreturn;
else
ﻩj=minus(a,b,d,m,n);
ﻩﻩfor(i=1;
j;
ﻩﻩprintf(”%d”,d[i]);
printf("
\n”);
return;
if(m>n&
&b[