PAT-B 1048 数字加密
https://pintia.cn/problem-sets/994805260223102976/problems/994805276438282240
题目
本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。
输入
输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。
输出
在一行中输出加密后的结果。
样例输入
1234567 368782971
样例输出
3695Q8118
分析
简单字符串处理,但是要注意,短字符串要补零成长度相同的字符串,具体看程序。
C++程序
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
char a[]={'0','1','2','3','4','5','6','7','8','9','J','Q','K'};
int main()
{
string A,B,C;
cin>>A>>B;
reverse(A.begin(),A.end());//反转
reverse(B.begin(),B.end());//反转
C=(A.length()>B.length())?A:B;
int len=max(A.length(),B.length());
for(int i=0;i<len;i++)
{
char c1=i<A.length()?A[i]:'0';
char c2=i<B.length()?B[i]:'0';
if(i%2==0)//奇数位(题目中个位编号为 1)
{
int tmp=(c1-'0'+c2-'0')%13;
C[i]=a[tmp];
}
else//偶数位
{
int tmp=c2-c1;
if(tmp<0) tmp+=10;
C[i]=tmp+'0';
}
}
reverse(C.begin(),C.end());
cout<<C<<endl;
return 0;
}