PAT(B) - 1048. 数字加密(20)

1048. 数字加密(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


题目还是挺好懂的,第一次提交没AC,思考之后发现是这个问题:

如果字符串a比b长度短,那么a的前面要补上0;如果b的长度短,那么b的前面要补上0。然后再用0按题目要求计算,这样就AC了。

第一次没AC是我单纯的以为某个字符串长度短,那就把另一个多余的部分输出就行了。


注意是从个位开始计算,所以从尾部遍历两个字符串


#include <iostream>
#include <cstring>

using namespace std;

int main() {
    //freopen( "123.txt", "r", stdin );
    char a[101], b[101];
    char c[101];

    cin >> a >> b;
    int len_a = strlen( a );
    int len_b = strlen( b );

    int num;
    int i;
    for( i = 1; i <= len_a || i <= len_b; i++ ) {
        char ch_a;
        char ch_b;
        //如果某个字符串已经遍历结束,就直接用'0'来计算
        if( i > len_a ) {
            ch_a = '0';
        }
        else {
            ch_a = a[len_a - i];
        }
        if( i > len_b ) {
            ch_b = '0';
        }
        else {
            ch_b = b[len_b - i];
        }
        if( i % 2 == 1 ) {
            num = ( ( ch_a - '0' ) + ( ch_b - '0' ) ) % 13;
            if( num < 10 ) {
                c[i] = num + '0';
            }
            else {
                switch( num ) {
                    case 10: c[i] = 'J'; break;
                    case 11: c[i] = 'Q'; break;
                    case 12: c[i] = 'K'; break;
                }
            }
        }
        if( i % 2 == 0 ) {
            num = ( ch_b - '0' ) - ( ch_a - '0' );
            if( num < 0 ) {
                num += 10;
            }
            c[i] = num + '0';
        }
    }

    //倒序输出
    for( i--; i >= 1; i-- ) {
        cout << c[i];
    }

    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值