蓝桥杯的题《平方差》

始终只有80%,不能通过第二个测试案例,求指点。
#include<iostream>
#include<cstring>
using namespace std;
int A[101],B[101],res1[202],res2[202],res[202];
int main()
{
string a,b;
cin>>a>>b;
if(a[0]=='-')a=a.substr(1);
if(b[0]=='-')b=b.substr(1);
bool negative = false; //标记结果是否为负数
//比较大小 位数相同的话 直接比才是可以的
if(a.size() < b.size() || (a.size()==b.size() && a<b)) swap(a,b),negative=true;
for(int i=0;i<a.size();i++)A[i]=a[i]-'0';
for(int i=0;i<b.size();i++)B[i]=b[i]-'0';
////计算A^2
for(int i=0;i<a.size();i++)
for(int j=0;j<a.size();j++)
res1[i+j+1] += A[i]*A[j];
for(int i=2*a.size()-1;i>0;i--) //进位
{
res1[i-1] += res1[i]/10;
res1[i] = res1[i]%10;
}
////计算B^2
for(int i=0;i<b.size();i++)
for(int j=0;j<b.size();j++)
res2[i+j+1] += B[i]*B[j];
for(int i=2*b.size()-1;i>0;i--) //进位
{
res2[i-1] += res2[i]/10;
res2[i] = res2[i]%10;
}
cout<<"A=";
for(int i=0;i<=2*a.size()-1;i++)cout<<res1[i];
cout<<endl;
cout<<"B=";
for(int i=0;i<=2*b.size()-1;i++)cout<<res2[i];
cout<<endl;
//做差
cout<<"直接差=";
int up=2*a.size()-1,down=2*b.size()-1;
for(up;up>=0;up--)
{
if(down>=0) res[up] = res1[up]-res2[down];
else res[up] = res1[up];
down--;
}
for(int i=0;i<=2*a.size()-1;i++) cout<<res[i];
cout<<endl;
for(int i=2*a.size()-1;i>=0;i--)
{
if(res[i] >=0 )continue;
res[i] += 10;
res[i-1] --;
if(i-1 <= 1 && res[i-1] < 0 ){ //这里是<= 个数数时 对应0
res[i-1] = 0;
break;
}
}
if(negative)cout<<'-';
int i=0;
while(res[i]==0 && i<= 2*a.size()-1) i++;
if(i==2*a.size())cout<<0;
for(i;i<=2*a.size()-1;i++)
{
cout<<res[i];
}
return 0;
}