厦大C语言上机 1368 解铃还须系铃人1

1368.解铃还须系铃人1


时间限制: 1000 MS          内存限制: 65536 K
        
提交数: 691 (0 users)          通过数: 299 (285 users)


问题描述




小明喜欢看谍战片,特别是喜欢看破译电报的桥段。现在他学了C语言,他想借助电脑,将自己的一些文档进行加密。不过有一次在整理硬盘的时候,他不小心把源文档给删掉了。只留下了加密后的文档。当然之间看加密的文档是看不出他写的是什么,不过小明还记得自己是怎么加密的,规律如下:
即第i个字母变成第(26-i+1)个字母。简单归纳该方法为对称转换加密。
按照上述规律转换,非字母字符不变。例如“China!”转换为“Xsrmz!” 
A→Z,  a→z
B→Y,  b→y
C→X,  c→x

Z→A,z→a


输入格式
输入一行加密后的字符串


输出格式
输出破译的字符串,注意请不要遗漏任何字符和输出多余的字符


样例输入
R droo erhrg Xsrmz mvcg dvvp.


样例输出
I will visit China next week.


来源
xmu

#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 100005

int main()
{
    char cipher[MAX_SIZE] = { 0 };
    char decryption[MAX_SIZE] = { 0 };
    int i;

    fgets(cipher, MAX_SIZE - 1, stdin);
    for (i = 0; cipher[i]; ++i)
    {
        if ('A' <= cipher[i] && cipher[i] <= 'Z')
            decryption[i] = (char)(25 - (cipher[i] - 'A') + 'A');
        else if ('a' <= cipher[i] && cipher[i] <= 'z')
            decryption[i] = (char)(25 - (cipher[i] - 'a') + 'a');
        else
            decryption[i] = cipher[i];
    }

    fputs(decryption, stdout);

    return 0;
}


上一篇:Security and Cryptography in Python - Stream Ciphers(4)


下一篇:Railfence