
#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的阶乘!欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)