#include<stdio.h>
#include<string.h>
int a[1000],b[1000],c[1000],d[1000];
void plus() //高精加
{
int i,len;
if (a[0]>b[0]) len=a[0];
else len=b[0];
for (i=1;i<=len;i++) c[i]=a[i]+b[i];
for (i=1;i<=len;i++)
{
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
if (c[len+1]>0) len++;
c[0]=len;
}
void sub1() //高精减,a-b;
{
int i,len;
if (a[0]>b[0]) len =a[0];
else len=b[0];
for (i=1;i<=len;i++)
{
d[i]+=a[i]-b[i];
if (d[i]<0)
{
d[i]+=10;
d[i+1]--;
}
}
while ((len>1)&&(d[len]==0)) len--;
d[0]=len;
}
void sub2() //高精减,b-a;
{
int i,len;
if (a[0]>b[0]) len =a[0];
else len=b[0];
for (i=1;i<=len;i++)
{
d[i]+=b[i]-a[i];
if (d[i]<0)
{
d[i]+=10;
d[i+1]--;
}
}
while ((len>1)&&(d[len]==0)) len--;
d[0]=len;
}
int cmp() //比较a,b大小,a>=b时,返回true,a<b时,返回false;
{
int i;
if (a[0]<b[0]) return 0;
for (i=a[0];i>=1;i++)
if (a[i]<b[i]) return 0;
return 1;
}
int main()
{
int i,len1,len2;
char s1[1000],s2[1000];
scanf("%s",s1); len1=strlen(s1);
scanf("%s",s2); len2=strlen(s2);
for (i=0;i<=len1;i++) a[len1-i]=s1[i]-'0'; a[0]=len1;
for (i=0;i<=len2;i++) b[len2-i]=s2[i]-'0'; b[0]=len2;
plus();
for (i=c[0];i>=1;i--) printf("%d",c[i]); printf("\n");
if (cmp()) //比较a,b的大小
sub1();//a>=b,直接减
else //a<b,用b-a,输出时先输出“-”
{
sub2();
printf("-");
}
for (i=d[0];i>=1;i--) printf("%d",d[i]);
return 0;
}
高精度加减
最新推荐文章于 2024-01-29 18:00:05 发布