类似加法,同样可以用竖式做减法。在做减法时需要注意的是:当被减数比减数大,输出为负数,同时要处理借位。
代码:
#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