0
点赞
收藏
分享

微信扫一扫

1048 数字加密 (20 分)

犹大之窗 2022-01-22 阅读 35
c++PAT乙级

本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。

输入格式:

输出格式:

输入样例:

输出样例:

解析:

本题最大的坑点就是,要在短的字符串前面补上0

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
char f[105];
int main(){
    string s1 , s2;
    cin>>s1>>s2;
    int len1 = s1.size();
    int len2 = s2.size();
    reverse(s1.begin() , s1.end());
    reverse(s2.begin() , s2.end());
    if(len1 > len2)
        s2.append(len1 - len2 , '0');
    else
        s1.append(len2 - len1 , '0');
    int len = s1.size();
    for(int i = 0 ; i < len ; i++){
        int k;
        if(i % 2 == 0){
            k = (s1[i] - '0' + s2[i] - '0') % 13;
        }
        else{
            k = s2[i] - s1[i];
            if(k < 0) k += 10;
        }
        if( k == 10 ) f[i] = 'J';
        else if(k == 11) f[i] = 'Q';
        else if(k == 12) f[i] = 'K';
        else f[i] = char(k + '0');
    }
    for(int i = len - 1 ; i >= 0 ; i--)
        cout<<f[i];
}

举报

相关推荐

0 条评论