版权声明:https://blog.csdn.net/huashuimu2003 https://blog.csdn.net/huashuimu2003/article/details/84920436
题目
描述 Description
16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法——Vigenère 密 码。Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为 南军所广泛使用。
输入格式 Input Format
输入文件名为 vigenere. in。 输入共 2 行。
第一行为一个字符串,表示密钥 k,长度不超过 100,其中仅包含大小写字母。第二行 为一个字符串,表示经加密后的密文,长度不超过 1000,其中仅包含大小写字母。
输出格式 Output Format
输出文件名为 vigenere.out。
输出共 1 行,一个字符串,表示输入密钥和密文所对应的明文。
样例输入 Sample Input
CompleteVictory
Yvqgpxaimmklongnzfwpvxmniytm
样例输出 Sample Output
Wherethereisawillthereisaway
时间限制 Time Limitation
1s
注释 Hint
【数据说明】
对于 100%的数据,输入的密钥的长度不超过 100,输入的密文的长度不超过 1000,且 都仅包含英文字母。
来源 Source
noip2012 day t1
代码
/*
*公式:明文=【暗文-(暗文>'Z'?'a':'A')-(密钥-'a')+26】%26+(暗文>'Z'?'a':'A')
*/
#include<bits/stdc++.h>
using namespace std;
char dark[1100],key[110];
int main()
{
scanf("%s%s",&key,&dark);
int len=strlen(key);
int j=0;
for (int i=0;i<strlen(dark);i++)
{//toupper()函数功能是把字母字符转换成大写,非字母字符不做出处理
int ch=tolower(key[j])-'a';
//tolower()函数功能是把字母字符转换成小写,非字母字符不做出处理
char cmd=dark[i]>'Z'?'a':'A';
int x=(dark[i]-cmd -ch+26)%26;
printf("%c",cmd+x);
j=(j+1)%len;//环的思想,分成区块
}
return 0;
}