zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    GRYZ20211029模拟赛解题报告
    LG 题解 CF1545B AquaMoon and Chess
    GRYZ10.27模拟赛解题报告
    开博客通告
    民科吧编程赛 题解
    民科吧编程赛 试题
    四则运算开平方——对民科吧编程大赛题目的再探究
    The First
    机械手相机9点坐标标定-基于C#+EmguCV
    Emgucv图像处理工具
  • 原文地址:https://www.cnblogs.com/xiongmao-cpp/p/6377665.html
Copyright © 2011-2022 走看看