PAT 1048. 数字加密

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tuotq/article/details/50273255

PAT 1048. 数字加密

题目

    时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B

Problem Description

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

Input

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

Output

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

Sample Input

1234567 368782971

Sample Output

3695Q8118

题解

先把短的字符串前面加0变成和长的一样,然后按照题目意思操作就行,字符串也可以先倒过来再操作,最后倒着输出就行。

代码

#include<iostream>
using namespace std;
#include<cstdio>
#include<cstring>
int main()
{

    char A[101];
    char B[101];
    char AB[101];
    int i=0;
    int j=0;
    int aLen=0;
    int bLen=0;
    int ab;  //A B字符串的差值
    int flag =0;
    int Len;

    scanf("%s",A);
    scanf("%s",B);

    aLen=strlen(A);
    bLen=strlen(B);


    Len = (aLen>bLen)?aLen:bLen;
    ab=(aLen>bLen)?aLen-bLen:bLen-aLen;


    if(aLen>bLen)
    {
        j=bLen;
        for(i=0; i<=bLen; i++)
        {
            B[j+ab]=B[j];
            j--;
        }
        for(i=0; i<ab; i++)
        {
            B[i]='0';
        }

    }
    else if(bLen > aLen)
    {
        j=aLen;
        for(i=0; i<=aLen; i++)
        {
            A[j+ab]=A[j];
            j--;
        }
        for(i=0; i<ab; i++)
        {
            A[i]='0';
        }
    }

    j=Len-1;
    for(i=1; i<=Len; i++)
    {

        if(i%2==0)
        {
            B[j] = (B[j] -'0')- (A[j] - '0');
            if(B[j]<0)
            {
                B[j] += 10;

            }
            B[j] +='0';
        }
        else
        {
            B[j] = (B[j] -'0')+ (A[j] - '0');
            B[j] %=13;
            if(B[j]>=10)
            {
                switch (B[j])
                {
                case 10:
                    B[j] = 'J';
                    break;
                case 11:
                    B[j] = 'Q';
                    break;
                case 12:
                    B[j] = 'K';
                }
            }
            else
            {
                B[j] += '0';
            }

        }
        j--;

    }
    //消除前面的0 也可以不要
    for(i=0,j=0; B[i]!='\0'; i++)
    {
        if((flag==0) && B[i]=='0')
        {
            continue;
        }
        else
        {
            AB[j]=B[i];
            flag =1;
            j++;
        }
    }
    AB[j]='\0';
    printf("%s\n",AB);
    return 0;
}
阅读更多
换一批

没有更多推荐了,返回首页