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

上传人:b****1 文档编号:1565881 上传时间:2023-05-01 格式:DOCX 页数:31 大小:1.30MB
下载 相关 举报
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第1页
第1页 / 共31页
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第2页
第2页 / 共31页
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第3页
第3页 / 共31页
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第4页
第4页 / 共31页
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第5页
第5页 / 共31页
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第6页
第6页 / 共31页
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第7页
第7页 / 共31页
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第8页
第8页 / 共31页
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第9页
第9页 / 共31页
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第10页
第10页 / 共31页
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第11页
第11页 / 共31页
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第12页
第12页 / 共31页
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第13页
第13页 / 共31页
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第14页
第14页 / 共31页
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第15页
第15页 / 共31页
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第16页
第16页 / 共31页
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第17页
第17页 / 共31页
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第18页
第18页 / 共31页
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第19页
第19页 / 共31页
大整数的四则运算高质量C语言程序资料讲解Word下载.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

《大整数的四则运算高质量C语言程序资料讲解Word下载.docx》由会员分享,可在线阅读,更多相关《大整数的四则运算高质量C语言程序资料讲解Word下载.docx(31页珍藏版)》请在冰点文库上搜索。

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

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)

return;

a[0]==45)

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

intmulti(inta[],intb[],intc[],intm,intn)//正整数乘法运算

intd[MAX]={0},e[MAX]={0},i,j,k,r,s,x,y;

c[i]=0;

=n)

for(i=m-1,s=1;

i--,s++)

for(r=0;

r<

r++){d[r]=0;

e[r]=0;

for(j=n-1,k=1*s;

j--,k++)

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

9){d[k+1]=d[k+1]+d[k]/10;

d[k]=d[k]%10;

y=k;

for(r=1;

r++,k--)

e[r]=d[k];

r++)

d[r]=e[r];

if(s==1)

x=plus(c,d,e,0,y+1);

x=plus(c,d,e,y,y+1);

r++)

c[r]=e[r];

elseif(m>

n)

for(j=n-1,s=1;

j--,s++)

d[r]=0;

for(i=m-1,k=1*s;

i--,k++)

d[k+1]=d[k+1]+d[k]/10;

d[k]=d[k]%10;

return(x);

voidprint(longc[],intflag)//输出

inti;

for(i=N-1;

=0;

i--)

if(c[i])

break;

if(flag)

%4d"

c[i--]);

for(;

i--)

{

if(c[i]/1000)

%4ld"

c[i]);

elseif(c[i]/100)

0%3ld"

elseif(c[i]/10)

00%2ld"

else

000%1ld"

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

charnum[N*4];

chartemp;

inti,j,k;

N*4;

num[i]=getchar();

if(num[i]==10)

{

i--;

break;

if(num[i]==45)

flag=(flag+1)%2;

k=0;

for(j=0;

=i/2;

temp=num[j];

num[j]=num[i-k];

num[i-k]=temp;

k=1;

=i;

j++)

switch(k)

case1:

a[j/4]+=(long)(num[j]-48);

case2:

a[j/4]+=(long)(num[j]-48)*10;

case3:

a[j/4]+=(long)(num[j]-48)*100;

case4:

a[j/4]+=(long)(num[j]-48)*1000;

returnflag;

voidmul(longa[],intfirst,intlast,longb[],longc[])//乘法

intmax_i;

longtemp;

for(max_i=N-1;

max_i>

max_i--)

if(b[max_i])

=max_i;

if(b[i])

for(j=first;

=last;

temp=a[j]*b[i];

c[i+j-first]+=temp%10000;

c[i+j-first+1]+=((temp/10000)+(c[i+j-first]/10000));

c[i+j-first]=c[i+j-first]%10000;

intcompara(longa[],intfirst,intlast,longb[])//比较数组a,b大小

intflag=2;

intk=0;

intlen;

for(len=N-1;

len>

len--)

if(b[len])

if((first-last)>

=len)

if((first-last)>

len)

flag=1;

else

for(i=len;

{

if(a[first-k]>

b[i])

{

flag=1;

break;

}

if(a[first-k]<

flag=0;

}

else

flag=0;

return

flag;

intminusd(longa[],intfirst,intlast,longb[],longc[],intflag)

intnotchange;

inti,k=0;

intmax;

notchange=compara(a,first,last,b);

if(notchange)

for(i=last;

=first;

if(a[i]<

b[k])

{

a[i]+=10000;

a[i+1]--;

c[i]=a[i]-b[k];

k++;

flag=(flag+1)%2;

for(max=N-1;

max>

max--)

if(b[max])

break;

for(i=0;

=max;

if(b[i]<

a[last+k])

b[i]+=10000;

b[i+1]--;

c[i]=b[i]-a[last+k];

k++;

voiddiv(longa[],longb[],longc[],intfa)//除法

longresult[N+1]={0};

intlen_a;

intk;

print(a,fa);

for(len_a=N-1;

len_a>

len_a--)

if(a[len_a])

k=len_a;

while(compara(a,len_a,0,b))

while(!

compara(a,len_a,k,b))

k--;

c[k]=1;

mul(c,k,k,b,result);

while(compara(a,len_a,k,result)){

c[k]++;

for(i=N-1;

result[i]=0;

mul(c,k,k,b,result);

c[k]--;

for(i=N-1;

result[i]=0;

minusd(a,len_a,k,result,a,0);

for(len_a=N-1;

if(a[len_a])

break;

k=len_a;

voidmenu()//菜单

==================================大整数计算器=================================="

1.加法2.减法3.乘法4.除法0.退出\n"

请从1~4中选择:

voidmain()//主函数

intflag;

intfa;

intfb;

longad[N],bd[N],cd[2*N];

inta[MAX]={0},b[MAX]={0},c[MAX]={0},d[

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

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2