PTA basic 1048 数字加密 (20 分) c++语言实现(g++)

本题要求实现一种数字加密方法。首先固定一个加密用正整数 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;
}

 

上一篇:算法 || 洛谷 1048 采药 动态规划 c语言


下一篇:PAT乙级_1048 数字加密 (20 分)_python