首页 > 代码库 > 1048. 数字加密(20)

1048. 数字加密(20)

1048. 数字加密(20)

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

输入格式:

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

输出格式:

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

输入样例:
1234567 368782971
输出样例:
3695Q8118

 

#include <iostream>
#include <stack>
using namespace std;

char num[]={0,1,2,3,4,5,6,7,8,9,J,Q,K};

int main()
{
    string a,b;
    cin>>a>>b;
    if(b.length()<a.length())
    {
        int n=a.length()-b.length();
        while(n--)
        {
            b="0"+b;
        }
    }
    int index_a=a.length()-1;
    int index_b=b.length()-1;
    int weishu=1;
    stack<char> res;
    for(;index_b>=0&&index_a>=0;index_b--,index_a--)
    {
        if(weishu%2==1)
        {
            int tmp=(int)(b[index_b]-0)+(int)(a[index_a]-0);
            tmp=tmp%13;
            res.push(num[tmp]);
        }
        else
        {
            int tmp=(int)(b[index_b]-0)-(int)(a[index_a]-0);
            if(tmp<0)
            {
                tmp+=10;
            }
            res.push(num[tmp]);
        }
        weishu++;
    }
    while(index_b>=0)
    {
        res.push(b[index_b]);
        index_b--;
    }
    while(res.size()>0)
    {
        cout<<res.top();
        res.pop();
    }
    cout<<endl;
    return 0;
}

 

1048. 数字加密(20)