欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PAT-1048 数字加密

程序员文章站 2022-03-08 16:17:28
...

1048 数字加密 (20 分)

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

输入格式:

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

输出格式:

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

输入样例:

1234567 368782971

输出样例:

3695Q8118
//需要将B与A补成一般长度进行计算,此外还应该注意string类型的数-‘0’为int类型,int类型+‘0’变为string类型
#include<iostream>
#include<string>
using namespace std;
int main()
{
  int i,l1,l2,max;
  string a,b;
  char c[100];
  cin>>a>>b;
  l1=a.length();
  l2=b.length();
  if(l1>l2)
  {
    max=l1;
  }
  else
  {
    max=l2;
  }
  for(i=1;i<=max;i++)
  {
    if(i%2==1)
    {
      if(i<=l1&&i<=l2)
      {
        c[max-i]=(a[l1-i]-'0'+b[l2-i]-'0')%13+'0';
        if((c[max-i]-'0')==10)
        {
          c[max-i]='J';
        }
         if((c[max-i]-'0')==11)
        {
          c[max-i]='Q';
        }
         if((c[max-i]-'0')==12)
        {
          c[max-i]='K';
        }
      }
      else if(i<=l1&&i>l2)
      {
        c[max-i]=(a[l1-i]-'0')%13+'0';
      }
      else if(i>l1&&i<=l2)
      {
        c[max-i]=(b[l2-i]-'0')%13+'0';
      }
    }
    else
    {
      if(i<=l1&&i<=l2)
      {
        int m=b[l2-i]-a[l1-i];
        if(m>=0)
        {
          c[max-i]=m+'0';
        }
        else
        {
          c[max-i]=m+10+'0';
        }
      }
      else if(i<=l1&&i>l2)
      {
        c[max-i]=a[l1-i];
      }
      else if(i>l1&&i<=l2)
      {
        c[max-i]=b[l2-i];
      }
    }
  }
  for(int i=0;i<=max-1;i++)
  {
    cout<<c[i];
  }
  return 0;
}

 

相关标签: pat