c的数组的方法计算超长整数加减法
发布网友
发布时间:2022-10-02 11:09
我来回答
共1个回答
热心网友
时间:2023-10-07 14:29
#include
<stdio.h>
#include<string.h>
int
main()
{
int
a1[2001],a2[2001],a3[2001],he,g,i,p,length,length1,length2,
flag=0;
char
s[2001];
for
(i=0;i<=2000;i++)
{
a1[i]=0;
a2[i]=0;
a3[i]=0;
}
printf("s1=");
gets(s);
/*将
字符数组
(即
被加数
)倒序存储到
数值
型数组(即a1[2001])中*/
length1=strlen(s);;
for
(i=0;i<length1;i++)
a1[i]=s[length1-i-1]-'0';
printf("s2=");
gets(s);
/*将字符数组(即
加数
)倒序存储到数值型数组(即a2[2001])中*/
length2=strlen(s);
for
(i=0;i<length2;i++)
a2[i]=s[length2-i-1]-'0';
length=length1>length2?length1++:length2++;
/*这里确定计算结果的
位数
:两数之和的位数最大为较大的数的位数加1*/
g=0;
printf("1--加法\n");
printf("2--减法\n");
scanf("%d",&p);
if(p==1)
{for
(i=0;i<=length;i++)
{
he=a2[i]+a1[i]+g;
g=he/10;
/*这里用g表示进位标志,如6+6的和为12,则进位标志g的值为1*/
a3[i]=he%10;
}
if
(a3[length]==0)
length--;
/*由于最高位是在两个加数中的较大数的位数人为加1,实际结果有可能没有这么多的位数,就会出现0368这样的
数字
,则应去掉
前面
的0,成为368*/
printf("s1+s2=");
}
if(p==2)
{
/*
可以先判断一下那个数比较大
*/
for
(i=length-1;
i>=0;
i--)
{
if
(a1[i]
>
a2[i]
)
{
for
(i=0;i<=length;i++)
{
if(a1[i]-g>=a2[i])
{
a3[i]=a1[i]-g-a2[i];
g=0;
}
else
{
a3[i]=a1[i]-g+10-a2[i];
g=1;
}
}
flag
=
1;
break;
}
else
if
(
a1[i]
<
a2[i]
)
{
for
(i=0;i<=length;i++)
{
if(a2[i]-g>=a1[i])
{
a3[i]=a2[i]-g-a1[i];
g=0;
}
else
{
a3[i]=a2[i]-g+10-a1[i];
g=1;
}
}
flag
=
2;
break;
}
}
while(a3[length]==0)
length--;
printf("s1-s2=");
}
if
(flag
==
0)
{
printf("0");
return
0;
}
else
if
(flag
==
2)
{
printf("-");
}
for
(i=length;i>=0;i--)
printf("%d",a3[i]);
/*输出得到的和即a3[i]的值*/
printf("\n");
return
0;
}