![在这里插入图片描述](https://img-blog.csdnimg.cn/20200805090814941.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNzQ5MjYy,size_16,color_FFFFFF,t_70)
记录一下自己遇到的坑:一定要考虑加密的A长度比B长的时候的情况,这时候B不够的地方就当成是0,跟原来的计算方法一样!!!
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
char change[]={'0','1','2','3','4','5','6','7','8','9','J','Q','K'};
int main()
{
string A,B,ans;
cin>>A>>B;
reverse(A.begin(),A.end());
reverse(B.begin(),B.end());
int pos=0;
while(pos<max(A.size(),B.size())){
int numA=pos<A.size()?A[pos]-'0':0;
int numB=pos<B.size()?B[pos]-'0':0;
if((pos+1)&1){
ans.push_back(change[(numA+numB)%13]);
}
else{
if(numB-numA<0)
ans.push_back(numB-numA+'0'+10);
else{
ans.push_back(numB-numA+'0');
}
}
pos++;
}
reverse(ans.begin(),ans.end());
cout<<ans<<endl;
return 0;
}