c语言程序设计:大整数的加减法

c语言程序设计:大整数的加减法,第1张

用rand()产生随机数,rand()会产生从0到一个很大的数,我记不清了,反咐模耐正很大。如果想出现100以内的,就用rand()%100。你可以定义三个int型整数,两个表示加或者减的对象,另一个标示加或者减,因为只要出现两种情况之一,所以可以用rand()%2,这样只会有0,1两种情况来标示加或者减。下面的就很容易了inta,b,i,cfor(i=0i<10i++){a=rand()%100b=rand()%100c=rand()%2if(c==0)/衡春/标示加码握法{printf("%d+%d=%d\n",a,b,a+b)}else{printf("%d-%d=%d\n",a,b,a-b)}}大致就这样,希望给你点帮助

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

char a[1000],b[1000]

int c[1001]

int x,y,i,j,k

int blen=0

int alen=0

char flag = '+'//用于减法标记负数

int Subtract(char *a, char *b, int len) { //为了避免代码重复,将共同的计答岁算抽出写成函数

int i

for (i=len-1i>=0i--) {

if (a[i] <b[i]) {

c[i] = a[i] + 10 - b[i]

b[i-1]++

} else {

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

}

}

return 0

}

int Subtraction(){

for (i=0i<100i++)

{

scanf("%c",&b[i])

if(b[i]=='\n')

break

blen++

}

printf("=")

if(alen>blen)

{

x=(alen-blen)

for(i=blen-1i>=0i--)

{

alen--

b[alen]=b[i]

}

for (i=0i<xi++)

b[i]='0'

alen=blen+x

blen=alen

} else if (blen >alen) {

x=(blen-alen)

for(i=alen-1i>=0i--)

{

blen--

a[blen]=a[i]

}

for (i=0i<xi++)

a[i]='0'

blen=alen+x

alen=blen

}

for (i=alen-1i>=0i--) {

a[i]=a[i]-'0'

b[i]=b[i]-'0'

}

if (strcmp(a, b) >0) {

Subtract(a, b, alen)

}else {

flag = '-'

Subtract(b, a, alen)

}

return 0

}

int Addition(){

for (i=0i<100i++)

{ scanf("%c",&b[i])

if(b[i]=='\n')

break

blen++

}

printf("=")

if(alen>blen)

{

x=(alen-blen)

for(i=blen-1i>=0i--)

{

alen--

b[alen]=b[i]

}

for (i=0i<xi++)

b[i]='0'

alen=blen+x

} else if (blen >alen) {

x=(blen-alen)

for(i=alen-1i>=0i--)

{

blen--

a[blen]=a[i]

}

for (i=0i<xi++)

a[i]='0'橡燃

blen=alen+x

alen=blen

}

for (i=alen-1i>=0i--) {

a[i]=a[i]-'0'

b[i]=b[i]-'0'

if(c[i+1]+a[i]+b[i]>=10)

{

c[i]=(c[i+1]+a[i]+b[i])/10

c[i+1] = (c[i+1]+a[i]+b[i])%10

}

else

{

c[i+1]+=(a[i]+b[i])

}

}

return 0

}

int main()

{

for (i=0i<100i++)

a[i]=0

for (i=0i<100i++)

b[i]=0

for (i=0i<101i++)

c[i]=0

for (i=0i<100i++)

{

scanf("%c",&a[i])

if(a[i]=='+'梁举虚)

{

Addition()

goto output1

}

if(a[i]=='-')

{

Subtraction()

goto output2

}

alen++

}

output1:

{

for (i=0i<=aleni++)

printf("%d",c[i])

return 0

}

output2:

{

printf("%c", flag)

for (i=0i<aleni++)

printf("%d",c[i])

return 0

}

}

代码运行结果:

123456789-12345

=+123444444

Terminated with return code 0

Press any key to continue ...

123456+111111

=0234567

Terminated with return code 0

Press any key to continue ...

1000000-1

=+0999999

Terminated with return code 0

Press any key to continue ...

1-1000000

=-0999999

Terminated with return code 0

Press any key to continue ...

//对你的代码作了! 希望有助于你的学习。

用高精度算法来实现,即用数组或指针来储存逗仿数字,例如A〔20〕来储存a ,用B〔20〕来储存b,这样a 和b就可以是很大的数,再用一个C〔21〕来储山升纤存结果,为什么C要21呢,你知道,加法是要近位的,呵呵。这里给出相加的伪代码,d =0/*用来存储近位笑做*/,for i=0到19{c=A〔i〕+B〔i〕+d ,d =c/10,c=c%10,C〔i〕=c}if d 不等于0 C〔i+1〕=d ,再逆的输出C就可以了!编程要学会思考,现在你可以试试编下高精度乘法,例如可以输出100的阶乘!


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12403479.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存