高精度减法

#include<stdio.h>
#include<string.h>
char s1[1000],s2[1000];//定义全局变量
int a[1000]={0},b[1000]={0},c[1000]={0},k,j;
int main()
{
int l1=0,l2=0,l=0,i;//定义局部变量
scanf("%s",s1);//读两个字符型的数
scanf("%s",s2);
l1=strlen(s1);//赋值S1长度
l2=strlen(s2);//赋值S2长度
for(i=0;i<=l1-1;i++)//倒序输入a数组
{
a[l1-1-i]=s1[i]-'0';
}
for(i=0;i<=l2-1;i++)//倒序输入b数组
{
b[l2-1-i]=s2[i]-'0';
}
if(l1==l2)//两个数的长度相等时
{
for(j=l1;j>=0;j--)//判断a,b谁大
 {
if(a[i]>b[i])
{
k=0;
break;
}
if(b[i]>a[i])
{
k=1;
break;
}


}
}
if(l1>l2||k==0)//a比b长而且a比b大,就是a大的时候
{
l=l1;//l登基成功,成为了新的l
for(i=0;i<=l;i++)
{
if(a[i]<b[i])//要借位的一个生命
{
a[i]=a[i]+10;//借10
a[i+1]-=1;//可惜高位要还1
}
c[i]=a[i]-b[i];//开减呗
}
while(l>1&&c[l-1]==0)l--;//判断后面有没有0,看完了没有,完了就把无用的0减了
for(i=l-1;i>=0;i--)//倒序输出 
printf("%d",c[i]);
}

else
{

l=l2;//l1比l2大,l2在谋权篡位
printf("-");//没办法,l1减不动就让符号来充数
c[i]=b[i]-a[i];//减呗,悲催啊,只能怪a太弱了
for(i=0;i<=l;i++)//重复刚才的过程,不过这个版本的主人公是b
{
if(b[i]>a[i])
{
b[i+1]=b[i+1]+10;
b[i]-=1;
}
c[i]=b[i]-a[i];

}
while(l>1&&c[l-1]==0) l--;
}
for(i=l-1;i>=0;i--)//倒序输出
{
printf("%d",c[i]);
}
return 0;//故事讲完了

 


}

 

posted @ 2016-07-07 11:43  侯喜千  阅读(163)  评论(1编辑  收藏  举报