PAT-B1048 数字加密

1048 数字加密(20 分)

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

输入格式:

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

输出格式:

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

输入样例:

1234567 368782971

输出样例:

3695Q8118
#include<iostream>
#include<cstring>
using namespace std;
int main(){
    string A,tB;
    cin>>A>>tB;
    int len1=A.size();
    int len2=tB.size();
    int max=len1>len2?len1:len2;
    char C[max];
    string B="";
    if(len1>len2){  //如果A比B长,长多少则补几个0
        for(int i=0;i<len1-len2;i++)
            B+='0';
    }
    B+=tB;//补在左边
    for(int i=B.size()-1,j=A.size()-1;i>=0&&j>=0;i--,j--){
        if((B.size()-i)%2==0){                  //从右边起如果是偶数位
            if(B[i]-A[j]<0){//B的数字减去A的数字也就是字符相减
                    C[i]=(B[i]-A[j])+10+'0';//判断完是否小于0之后转换成字符
            }else{
                C[i]=B[i]-A[j]+'0';//大于0则直接转换成字符
            }
        }else{  //如果是奇数位
            if((B[i]-'0'+A[j]-'0')%13==10)//先将对应位转换成数字再对13取余
            C[i]='J';   
            else if((B[i]-'0'+A[j]-'0')%13==11)
            C[i]='Q';   
            else if((B[i]-'0'+A[j]-'0')%13==12)
            C[i]='K';
            else {
                C[i]=(B[i]-'0'+A[j]-'0')%13+'0';
            }
        }   
    }
    for(int i=0;i<len2-len1;i++)//若A>B,将不变的元素赋值过来
        C[i]=B[i];
    for(int i=0;i<max;i++){
        cout<<C[i];
    }   
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值