题目描述
有一行电文,已按如下规律译成密码:
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+264-密文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;
}
网友评论