1048 数字加密 (20 分)

本题通过率比较低,分为以下几个步骤

1.将两个string倒置(for(int i=0;i<=len-i-1;i++) swap(a[i],a[len-i-1]);

2.将短的那个数组的后面补齐字符0,

如果a短,a.append(len2-len1,'0')(第一个为长度,第二个为想要补的字符)

3.遍历计算加密数据

注意一个小点,i是从0开始遍历的,计算奇偶性时,要从(i+1)开始算

4.最后将得到的新string倒叙输出

string c="";//一开始的初始化

 

#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string a,b;
    string c="";
    char List[13]={'0','1','2','3','4','5','6','7','8','9','J','Q','K'};
    //freopen("1048.txt","r",stdin);
    cin>>a>>b;
    int len1=a.length(),len2=b.length();
    for(int i=0;i<=len1/2-1;i++)//记得小于等于号,交换的条件
    {
        swap(a[i],a[len1-i-1]);
    }
    for(int i=0;i<=len2/2-1;i++)
        swap(b[i],b[len2-i-1]);
    int Max;
    if(len1>len2)//之后补上零
    {
        Max=len1;b.append(len1-len2,'0');
    }
    else
    {
        Max=len2;a.append(len2-len1,'0');
    }
     int t;
    for(int i=0;i<Max;i++)
    {
        if((i+1)%2)
        {
            t=((b[i]-'0')+(a[i]-'0'))%13;
        }
        else
        {
            t=(b[i]-'0')-(a[i]-'0');
            if(t<0)
                t+=10;
        }
        //cout<<t<<endl;
        c+=List[t];
    }
    for(int i=c.length()-1;i>=0;i--)
        cout<<c[i];
    return 0;
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值