1. 程式人生 > >【PAT】1048. 數字加密(20)

【PAT】1048. 數字加密(20)

  1. 數字加密(20)

時間限制
400 ms
記憶體限制
65536 kB
程式碼長度限制
8000 B
判題程式
Standard
作者
CHEN, Yue
本題要求實現一種數字加密方法。首先固定一個加密用正整數A,對任一正整數B,將其每1位數字與A的對應位置上的數字進行以下運算:對奇數位,對應位的數字相加後對13取餘——這裡用J代表10、Q代表11、K代表12;對偶數位,用B的數字減去A的數字,若結果為負數,則再加10。這裡令個位為第1位。

輸入格式:

輸入在一行中依次給出A和B,均為不超過100位的正整數,其間以空格分隔。

輸出格式:

在一行中輸出加密後的結果。

輸入樣例:
1234567 368782971
輸出樣例:
3695Q8118

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <string>
#include <string.h>
using namespace std;


int main() {
    freopen("input.txt", "r", stdin);
    char A[101], B[101];
    char largnum[] = {'J','Q','K'};
    scanf("%s %s", A, B);
    int
al=strlen(A), bl=strlen(B); bool odd = true; string result; while (--al >= 0 && --bl >= 0) { int aa = A[al] - '0'; int bb = B[bl] - '0'; int nn; char cc; if (odd) { nn = (aa + bb) % 13; odd = false; } else
{ nn = bb - aa; if (nn < 0) { nn = nn + 10; } odd = true; } if (nn > 9) { cc = largnum[nn - 10]; } else { cc = nn + '0'; } result.insert(0, 1, cc); } if (bl > 0) { for (int i = 0; i < bl; i++) { cout << B[i]; } } cout << result; }