zoukankan      html  css  js  c++  java
  • PAT 1048数字加密

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

    输入格式:

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

    输出格式:

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

    输入样例:

    1234567 368782971

    输出样例:

    3695Q8118

    解题思路:

    (1)首先需要注意的是加密是从低位到高位进行计算的,并且有一个位数多的话,比较短的那一个对应位按0来计算。

    (2)处理的时候从最低位开始,将字符串反转比较好处理(字符串反转调用STL中的reverse本地可以,但是PAT的oj编译不通过,所以就写一个reverse方法),然后遍历,逐个位数来判断。需要注意的是循环的i从0开始,所以奇数位和偶数位是相反的。

    #include<iostream>
    #include<cstring>
    using namespace std;
    const int MAXN = 102;
    char A[MAXN], B[MAXN], result[MAXN] = {0};
    
    void reverse(char c[]) {
        int len = strlen(c);
        for (int i = 0; i < len / 2; i++) {
            char temp = c[i];
            c[i] = c[len - 1 - i];
            c[len - 1 - i] = temp;
        }
    }
    
    int main() {
        cin >> A >> B;
        //将A和B反转,要从低位开始
        reverse(A);
        reverse(B);
        int maxlen = strlen(A) > strlen(B) ? strlen(A) : strlen(B);
        for (int i = 0; i < maxlen; i++) {
            //计算当前A,B位的数字,有某一个的字符长度比较短,填0
            int numA = i < strlen(A) ? A[i] - '0' : 0;
            int numB = i < strlen(B) ? B[i] - '0' : 0;
            //偶数位
            if ((i + 1) % 2 == 0) {
                int c = numB - numA;
                if (c < 0) c += 10;
                result[i] = c + '0';
            }
            else {
                //奇数位
                int temp = (numA + numB) % 13;
                if (temp < 10) {
                    result[i] = temp + '0';
                }
                else if(temp == 10){
                    result[i] = 'J';
                }
                else if (temp == 11) {
                    result[i] = 'Q';
                }
                else if (temp == 12) {
                    result[i] = 'K';
                }
            }
        }
        //将结果反转
        reverse(result);
        printf("%s
    ", result);
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    JAVA动态添加枚举值
    maven仓库配置
    AWS S3 上传下载文件
    golang http client的MaxConnsPerHost限制
    redis cli的特殊用法
    go调度: 第三部分-并发
    tcmalloc的memory heap profiler
    【流数据处理】MySql/PG/Oracle+Kafka+Flink(CDC捕获) 部署及实时计算
    【概念】详解MapReduce原理
    一次失败的创业经历
  • 原文地址:https://www.cnblogs.com/syq816/p/12527180.html
Copyright © 2011-2022 走看看