本题通过率比较低,分为以下几个步骤
1.将两个string倒置(for(int i=0;i<=len-i-1;i++) swap(a[i],a[len-i-1]);
2.将短的那个数组的后面补齐字符0,
如果a短,a.append(len2-len1,'0')(第一个为长度,第二个为想要补的字符)
3.遍历计算加密数据
注意一个小点,i是从0开始遍历的,计算奇偶性时,要从(i+1)开始算
4.最后将得到的新string倒叙输出
string c="";//一开始的初始化
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a,b;
string c="";
char List[13]={'0','1','2','3','4','5','6','7','8','9','J','Q','K'};
//freopen("1048.txt","r",stdin);
cin>>a>>b;
int len1=a.length(),len2=b.length();
for(int i=0;i<=len1/2-1;i++)//记得小于等于号,交换的条件
{
swap(a[i],a[len1-i-1]);
}
for(int i=0;i<=len2/2-1;i++)
swap(b[i],b[len2-i-1]);
int Max;
if(len1>len2)//之后补上零
{
Max=len1;b.append(len1-len2,'0');
}
else
{
Max=len2;a.append(len2-len1,'0');
}
int t;
for(int i=0;i<Max;i++)
{
if((i+1)%2)
{
t=((b[i]-'0')+(a[i]-'0'))%13;
}
else
{
t=(b[i]-'0')-(a[i]-'0');
if(t<0)
t+=10;
}
//cout<<t<<endl;
c+=List[t];
}
for(int i=c.length()-1;i>=0;i--)
cout<<c[i];
return 0;
}