码迷,mamicode.com
首页 > 其他好文 > 详细

PAT 1048数字加密

时间:2020-03-19 21:54:29      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:clu   reverse   超过   反转   printf   需要   soft   style   pause   

本题要求实现一种数字加密方法。首先固定一个加密用正整数 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\n", result);

    system("pause");
    return 0;
}

 

PAT 1048数字加密

标签:clu   reverse   超过   反转   printf   需要   soft   style   pause   

原文地址:https://www.cnblogs.com/syq816/p/12527180.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!