PATB1048:数字加密

PATB1048:数字加密

【思路】: 输入 循环 判断,只需要对每个元进行一次操作即可

【知识点】

杂类用hash表示

char has_z[3] = { 'J', 'Q', 'K' };

【知识点】

对于c的字符数组可以用reverse来进行字符数组的反转,本题由于是字符到bit的操作,所以字符反转是常规思路

reverse(a, a + strlen(a));
reverse(b, b + strlen(b));

【知识点】

一个分支,只有一个操作而不是附加操作的话 需要用 if else 而非if(附加操作)

if (num <=12 && num >=10)
            {
                ans[k++] = has_z[num - 10];  //一定是 if else
            }
            else {
                ans[k++] = '0' + num;
            }

【知识点】

对于没法不全的补充,字符补充,分支判断

        if (i <strlen(a))
        {
            bit1 = a[i] - '0';
        }
        else{
            bit1 = 0;
        }

【参考代码】

    //数字加密
void B1048(){
    char has_z[3] = { 'J', 'Q', 'K' };

    char a[110] , b[110];
    cin >> a >> b;
    reverse(a, a + strlen(a));
    reverse(b, b + strlen(b));

    int size = max(strlen(a), strlen(b));
    char ans[110] = {'\0'}; int k = 0;
    for (int i = 0; i < size; i++)
    {
        int bit1;
        int bit2 ;
        if (i <strlen(a))
        {
            bit1 = a[i] - '0';
        }
        else{
            bit1 = 0;
        }
        if (i <strlen(b))
        {
            bit2 = b[i] - '0';
        }
        else{
            bit2 = 0;
        }


        //得到数字

        if (i % 2 == 0)//奇数
        {
            int num = (bit1 + bit2) % 13;
            if (num <=12 && num >=10)
            {
                ans[k++] = has_z[num - 10];  //一定是 if else
            }
            else {
                ans[k++] = '0' + num;
            }
        }
        else{
            int num2 = bit2 - bit1;
            if (num2 < 0)
            {
                num2 += 10;
            }
            ans[k++] = '0' + num2;
        }

    }
    reverse(ans, ans + strlen(ans));
    puts(ans);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值