代码如下:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int main(){ int a[256],b[256],c[256],lena,lenb,lenc,i; char n[256],n1[256],n2[256]; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); scanf("%s",n1); scanf("%s",n2); if(strlen(n1)<strlen(n2)||strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0) { strcpy(n,n1);//复制与转换 strcpy(n2,n); strcpy(n2,n); cout<<"-";//减法特有性质,如果被减数小于减数,那么先把他们倒过来算,最后在加一个负号 } lena=strlen(n1);lenb=strlen(n2);//确定位数 for(i=0;i<=lena-1;i++)a[lena-i]=int(n1[i]-48);////利用ascll码性质,0的ascll码为48.减去零就是ascll减去48,成功将字符转化为数字 for(i=0;i<=lenb-1;i++)b[lenb-i]=int(n2[i]-48);//同上 while(i<=lena||i<=lenb) { if(a[i]<b[i]) { a[i]+=10; a[i+1]--;//对应位相减 } c[i]=a[i]-b[i];//对应位相减得到对应的c i++;//继续下一位 } lenc=i; while(c[lenc]==0&&lenc>1)//如果最高为上为零,lenc减一,消去 lenc--; for(i=lenc;i>=1;i--)//此for用来一位一位倒序输出 cout<<c[i]; cout<<endl; return 0; }