PAT B1048 数字加密
前言
正文
思路
见代码注释
参考题解
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
/*
首先用字符串读入A,B,用len记录二者较长的长度,再使用reverse函数(在algorithm头文件里)
对A和B进行翻转,遍历每一字符,按照题意进行计算加密后的每一位存入字符串res中,
再将字符串翻转后输出即可
*/
int main(){
string a,b,res;
cin>>a>>b;
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
int lenA=a.size(),lenB=b.size();
int len=lenA>lenB?lenA:lenB;//取较长的
for(int i=0;i<len;i++){
int x,y;
//字符数字转整型数字,注意此处的技巧相应位数没有字符的话就为0
x=i<lenA?a[i]-'0':0;
y=i<lenB?b[i]-'0':0;
if(i%2==0){//奇数位
int temp=(x+y)%13;
if(temp==10)res+='J';
else if(temp==11)res+='Q';
else if(temp==12)res+='K';
else res+=temp+'0';
}else{//偶数位
int temp=y-x;
if(temp<0)temp+=10;
res+=temp+'0';
}
}
reverse(res.begin(),res.end());
cout<<res<<endl;
return 0;
}