解密

作者: DCBXZ | 来源:发表于2021-02-06 09:53 被阅读0次

题目描述

有一行电文,已按如下规律译成密码:

A-->Z a-->z

B-->Y b-->y

C-->X c-->x

...... ......

即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求根据密码译回原文,并输出。

输入

输入一行密文

输出

解密后的原文,单独占一行。

样例输入

ZYX123zyx

样例输出

ABC123abc


思路:

先算出每个字符的ASCII码,然后判断是大写字母还是小写字母还是数字,如果是数字则不处理,如果是字母则进行处理:

(密文+明文)=27
如A为第一个字母,Z为第26个字母,则(A+Z)=27。

转化为ASCII码:

((64+i)+(64+x))-2*64=27

则明文的ASCII码为

(64+x)=27+264-(64+i)
即:明文ASCII码=27+2
64-密文ASCII码

代码如下:

#include <bits/stdc++.h>
int main() {
    char a[100];
    int acode=0;     //ASCII码值
    gets(a);
    for(int i=0;i<strlen(a);i++)
    {
        acode=a[i]-'0'+48;    //计算字符的ASCII码值
        if(acode>='A')
        {
            if(acode<='Z')    //如果是大写字母
            {
                a[i]=27+2*64-acode;
            }
            else    //如果是小写字母(小写字母的ASCII码值比大写字母要大)
            {
                a[i]=27+2*96-acode;
            }   
        }
    }
    
    puts(a);
    return 0;
}

相关文章

网友评论

      本文标题:解密

      本文链接:https://www.haomeiwen.com/subject/yqwntltx.html