解密

题目描述:
有一行电文,已按如下规律译成密码:
A–>Z a–>z
B–>Y b–>y
C–>X c–>x
…… ……
即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求根据密码译回原文,并输出。


输入格式:
输入一行密文

输出格式:
解密后的原文,单独占一行。


输入样例:
ZYX123zyx

输出样例:
ABC123abc


train of thought:

code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <cstdio>
#include <cstring>
int main()
{
char a[100];
char b[27];
b[0] = '0';
for (int i = 1; i < 27; i++)
{
b[i] = 'A' + i - 1;
}
char c[27];
c[0] = '0';
for (int i = 1; i < 27; i++)
{
c[i] = 'a' + i - 1;
}
gets(a);
int k = strlen(a);
for (int i = 0; i < k; i++)
{
if ('0' <= a[i] && a[i] <= '9')
a[i] = a[i];
else if ('A' <= a[i] && a[i] <= 'Z')
{
for (int j = 1; j < 27; j++)
{
if (a[i] == b[j])
{
a[i] = b[-j + 26 + 1];
break;
}
}
}
else if ('a' <= a[i] && a[i] <= 'z')
{
for (int j = 0; j < 27; j++)
{
if (a[i] == c[j])
{
a[i] = c[-j + 26 + 1];
break;
}
}
}
}
for (int i = 0; i < k; i++)
{
printf("%c", a[i]);
}
return 0;
}