当前位置: 代码迷 >> 综合 >> PAT乙级-1048 数字加密 (20分)
  详细解决方案

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

热度:108   发布时间:2023-09-27 00:55:34.0

点击链接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错误