#include <iostream>
using namespace std;
string strsum(string,string);//处理两个string的和
int main()
{
int n;
cin>>n;
for(int h=1;h<=n;h++){
string a,b;
cin>>a>>b;
//两个while去掉前导零,如001变成1,不去除导致pe
while(a[0]=='0'&a.size()!=1){
a=a.substr(1,a.size()-1);
}
while(b[0]=='0'&b.size()!=1){
b=b.substr(1,b.size()-1);
}
cout<<"Case "<<h<<":"<<endl;
cout<<a<<" + "<<b<<" = ";
string c=strsum(a,b);
cout<<c<<endl;
if(h!=n){
cout<<"\n";
}
}
return 0;
}
string strsum(string a,string b){
//采用从末位开始,逐位相加,并记录进位的方法
string c;
//较大数置为a
if(a.size()<b.size()){
swap(a,b);
}
int n=a.size();
int m=b.size();
//cout<<"\nn="<<n<<" "<<"m="<<m<<"\n";
c.resize(n);
//其实用a初始化c应该也行。另外,在a上面直接用原位递增b[m-i]的值应该也行,最后直接返回a
int mark=0;//进位标记
for(int i = 1;i<=n;i++){
int k=0;
if(i<=m){
k=b[m-i]-'0';
}
//其实将b前面补0到与a相同长度就不用这么麻烦了
//cout<<"\nk= "<<k<<"\n";
//进位与不进位
if((a[n-i]-'0')+(k)+mark>=10){
c[n-i]='0'+((a[n-i]-'0')+(k)+mark-10);
mark=1;
}
else{
c[n-i]='0'+((a[n-i]-'0')+(k)+mark);
mark=0;
}
}
//最后如果要进位,就在前面加一个1就好了。
if(mark){
c="1"+c;
mark=0;
}
while(c[0]=='0'&c.size()!=1){
c=c.substr(1,c.size()-1);
}//这里去除和的前导零不知有无必要,没尝试
return c;
}
整了一下午才ac。。头疼。。。