类似加法,同样可以用竖式做减法。在做减法时需要注意的是:当被减数比减数大,输出为负数,同时要处理借位。
代码:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int i,j,len,x[110000],y[110000],n1,n2,jw=0,o;
char a[110000],b[110000],c[110000];
int main()
{
cin>>a>>b;
n1=strlen(a);
n2=strlen(b);
if(n1<n2||strcmp(a,b)<0&&n1==n2)//如果n1<n2那么减数比被减数小,结果为负数,如果位数一样,那么用strcmp一位一位比较(1)
{
strcpy(c,a);//用strcpy把a,b数组的值交换(2)
strcpy(a,b);
strcpy(b,c);
cout<<"-";//输出负号
x[i]=y[i]-x[i];
o=n1;//n1,n2交换
n1=n2;
n2=o;
}
for(i=0;i<n1;i++)
{
x[i]=a[n1-1-i]-'0';//倒序存储
}
for(i=0;i<n2;i++)
{
y[i]=b[n2-1-i]-'0';
}
len=max(n1,n2);
for(i=0;i<len;i++)
{
x[i]=x[i]-y[i]-jw;
if(x[i]<0&&y[i]>x[i])//如果小于0
{
x[i]=x[i]+10;//当前加10
x[i+1]=x[i+1]-1;//下一位-1
}
x[i]=x[i]%10;
}
int f=i;
while(x[f]==0)//去0
{
f--;
}
for(i=f;i>=0;i--)cout<<x[i];
if(f<0) cout<<0;
}
(1):strcmp
(2):strcpy