问题描述
按照题目中给出的规则,对A和B进行加密,输出加密后的数字。
题目分析
显然这里我们只能用字符串去运算,因为这个数字实在是太大了。由于我们把个位数当作1,而我们应该从高位读取字符串并输出,所以我们的输出实际上是倒过来的,所以我们想用内置函数reverse将A和B翻转过来。如果A和B长度不等,就将较短的字符串前面补字符’0’使二者相等。预先处理完成后,我们就可以按规则对两个字符串进行加密了。但是别忘了,我们一开始就把字符串翻转了过来,所以我们还需要再翻转回去。
代码
#include<iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string A,B,result;
cin>>A>>B;
//倒转字符串
reverse(A.begin(),A.end());
reverse(B.begin(),B.end());
if(A.length() <B.length())
//字符串拼接,如果长度不一样,则用0补充
//这里也可以使用C++字符串的append操作
//这里的语法意思为在A的后面拼接上0,使得A的长度和B的长度相等
//这里说明一下,通过加和来将字符串拼接的操作很重要,经常会用到
A+=string(B.length()-A.length(),'0');
else if(A.length() > B.length())
B+=string(A.length()-B.length(),'0');
int len = B.length();
for(int i=0;i !=len;i++){
if(i%2 == 0)
{
int temp = (A[i]+B[i]-'0'-'0')%13;
if(temp ==10) result+='J';
else if(temp == 11) result+='Q';
else if(temp == 12) result+='K';
else result+=temp+'0';
}
else
//加'0'表示将数字变为字符串
result+=(B[i]-A[i]+10)%10+'0';
}
reverse(result.begin(),result.end());
cout<<result;
}
答题用时14min
Q48——finish√