PAT乙级-1048 数字加密 (20分)

点击链接PAT乙级-AC全解汇总

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

输入格式:
输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。

输出格式:
在一行中输出加密后的结果。

输入样例:

1234567 368782971

输出样例:

3695Q8118

我的代码:

#include<iostream>
#include<cstdio>
#include<vector>
#include<string>
#include<set>
#include<map>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<cstring>
#include<sstream>
using namespace std;
//有的时候题目是一起做的,所以会有不需要的头文件

int main()
{
    string aa,bb;
    cin>>aa>>bb;
    if(bb.length()<aa.length())bb.insert(0,aa.length()-bb.length(),'0');
    int len_a=aa.length();
    int len_b=bb.length();
    for(int i=1;i<=len_a&&i<=len_b;i++)
    {//从1开始方便计算奇数偶数
        if(i%2)//奇数
        {
            int mod=(aa[len_a-i]-'0'+bb[len_b-i]-'0')%13;
            if(mod==10)bb[len_b-i]='J';
            else if(mod==11)bb[len_b-i]='Q';
            else if(mod==12)bb[len_b-i]='K';
            else bb[len_b-i]='0'+mod;
        }
        else//偶数
        {
            int mod=bb[len_b-i]-aa[len_a-i];
            if(mod<0)mod+=10;
            bb[len_b-i]='0'+mod;
        }
    }
    cout<<bb;
    return 0;
}

注意b长度小于a的时候,也要把a所有的数字都用上,即把b前面用0补齐再计算,不然会有两个case错误

发布了82 篇原创文章 · 获赞 1 · 访问量 1688

猜你喜欢

转载自blog.csdn.net/qq_34451909/article/details/104816673
今日推荐