本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。
输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。
在一行中输出加密后的结果。
1234567 368782971
3695Q8118 需要注意的地方 1.a位数比b小的时候, a不足的对应位置要补0
2.b位数比a小的时候, b不足的对应位置要补0 测试点2 5
#include <iostream> #include <vector> #include <cstdlib> using namespace std; int main(){ int i=1,tempb,tempa,aindex,bindex; vector<char> alpha{'0','1','2','3','4','5','6','7','8','9','J','Q','K'}; vector<char> str; string a,b; cin >> a >> b; int bsize=b.size(); int asize=a.size(); vector<int> aArr,bArr; for(auto i:a){ aArr.push_back(static_cast<int>(i-'0')); } for(auto i:b){ bArr.push_back(static_cast<int>(i-'0')); } for(int i=0;i<bsize||i<a.size();i++){ if(asize-1-i<0)tempa=0;else tempa=aArr[asize-1-i];//a的位数比b小时,对位要补0 if(bsize-1-i<0)tempb=0;else tempb=bArr[bsize-1-i];//b的位数比a小时,对位也要补0 测试点2 5 if(i%2!=0){//偶数位 tempb=tempb-tempa; tempb=tempb<0?tempb+10:tempb; str.push_back(to_string(tempb)[0]); }else{//奇数位 tempb=(tempb+tempa)%13; str.push_back(alpha[tempb]); } } while(str.size()){ cout << str[str.size()-1]; str.pop_back(); } cout <<endl; return 0; }