大整数的四则运算高质量C语言程序文件Word文档格式.docx
《大整数的四则运算高质量C语言程序文件Word文档格式.docx》由会员分享,可在线阅读,更多相关《大整数的四则运算高质量C语言程序文件Word文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
3)乘法运算
符号存放在最低位,将其中一个数a的每一位分别乘以另一个数b的每一位,并将结果保存在数组c中,然后重复计算a的下一位跟b的每一位的乘积,把上一次计算保存在c的值加上本次计算后的值,并保存在c自身中,直到a的最高位,最后输出符号和相应的计算结果。
4)除法运算
利用乘法和减法,将除数分别乘以1到9,直到其值大于等于被除数的对应的数,然后被除数对应的数减去其乘积,保存在一个数组中,下一次循环把它归到被除数中继续做除法运算,最后得到余数并输出。
4.函数功能:
1.voidinit(inta[],intb[],int*p1,int*p2)
2.功能说明:
读入所要计算的数值,数据初始化
3.intplus(inta[],intb[],intc[],intm,intn)
4.功能说明:
两个正整数相加
3.voidchange(inta[],intb[],intm,intn)
功能说明:
当两异号数相加时,改变其符号以符合加法运算
5.intminus(inta[],intb[],intd[],intm,intn)
6.功能说明:
两个正整数相减
5.voidminusfun(inta[],intb[],intd[],intm,intn)
判断两个异号数的相加方式
7.intmulti(inta[],intb[],intc[],intm,intn)
8.功能说明:
两个正整数相乘
7.voidprint(longc[],intflag)
功能说明:
打印带符号flag(1为负)的longc[]数组
8.intwrite(longa[],intflag)
将键盘敲入的数字按4位一组放入longa[],且将符号放入flag
9.voidmul(longa[],intfirst,intlast,longb[],longc[])
乘法,a的第last到first位乘以b,答案放到c
10.intcompara(longa[],intfirst,intlast,longb[])
比较数组a,b大小,firstlast分别为a的最高最低位
11.intminusd(longa[],intfirst,intlast,longb[],longc[],intflag)
a为被减数,firstlast为a最高最低位,b为减数,c为差,flag为符号
12.voiddiv(longa[],longb[],longc[],intfa)
除法,a除以b的值放入c,fa为a符号
13.voidmenu()
打印菜单函数
14.voidmain()
主函数,调用其余函数,计算相应功能的值并输出。
5.源程序:
#include<
iostream.h>
math.h>
stdio.h>
#defineMAX40//可以修改,此时最大运算位数为四十位
#defineN10//此处应为最大位数除以4
voidinit(inta[],intb[],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'
;
a[i]=r-48;
else
a[1]=r-48;
for(i=2;
*p1=i;
请输入处理的第二个数的值:
s=getchar();
if(s==45)
b[0]=s;
for(j=1;
(s=getchar())!
j++)
b[j]=s-48;
b[1]=s-48;
for(j=2;
*p2=j;
}
intplus(inta[],intb[],intc[],intm,intn)//加法运算
intd[MAX]={0},i,j,k;
i++)c[i]=0;
if(a[1]==0)
for(i=0;
n;
i++)c[i]=b[i];
return(i);
if(b[1]==0)
m;
i++)c[i]=a[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];
9)
k++;
i--;
}
while(j>
d[k]=d[k]+b[j];
if(d[k]>
{
d[k+1]++;
}
k++;
j--;
d[0]=a[0]+b[0];
c[0]=d[0];
if(d[k]==0)
k--;
for(i=1;
k>
i++,k--)
c[i]=d[k];
return(i);
voidchange(inta[],intb[],intm,intn)//变号运算
intc[MAX];
if(m<
=n&
b[0]==45)
c[i]=a[i];
for(i=1,j=1;
j<
i++,j++)
a[i]=b[j];
b[i]=c[j];
for(j=i;
b[j]=0;
return;
if(m>
a[0]==45)
a[0]=0;
b[0]=45;
intminus(inta[],intb[],intd[],intm,intn)//减法运算
intc[MAX]={0},i,j,k;
d[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];
c[k]=c[k]+a[i];
if(c[k]<
c[k]+=10;
c[k+1]--;
i--;
c[k]=a[i]+c[k];
while(c[k]<
=0&
i++)
d[i]=c[k--];
voidminusfun(inta[],intb[],intd[],intm,intn)//判断是否两异号数相加
inti,j,f=0,g=0;
if(b[0]!
=0)printf("
-"
printf("
%d"
b[i]);
printf("
\n"
if(a[0]!
=0)
a[i]);
if(m==n)
if((a[i]<
b[i]&
b[0]==45)||(a[i]>
a[0]==45))
g=1;
if(a[i]!
=b[i])f=1;
if(f==0)
0\n"
if(g==1)
change(a,b,m,n);
j=minus(a,b,d,n,m);
j;
i++)printf("
d[i]);
return;
elseif(a[0]==45&
b[0]==0)
j=minus(b,a,d,n,m);
else
j=minus(a,b,d,m,n);
n&
b[0]==45)
retur