【题目描述】
6世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法——Vigenère密码。Vigenère密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为南军所广泛使用。
在密码学中,我们称需要加密的信息为明文,用M
,运算®的规则如下表所示:
Vigenère加密在操作时需要注意:
1.®运算忽略参与运算的字母的大小写,并保持字母在明文M
中的大小写形式;
2.当明文M
的长度大于密钥k的长度时,将密钥k重复使用。
例如,明文M
,密钥k=abc时,密文C。
【输入】
第一行为一个字符串,表示密钥k
,其中仅包含大小写字母。
第二行为一个字符串,表示经加密后的密文,长度不超过1000
,其中仅包含大小写字母。
对于100%的数据,输入的密钥的长度不超过100
,输入的密文的长度不超过1000,且都仅包含英文字母。
【输出】
输出共1行,一个字符串,表示输入密钥和密文所对应的明文。
【输入样例】
CompleteVictory Yvqgpxaimmklongnzfwpvxmniytm
【输出样例】
Wherethereisawillthereisaway
#include<bits/stdc++.h> using namespace std; string k,c; int main() { getline(cin,k); getline(cin,c); int len=k.size(),len1=c.size(); for(int i=0;i<len;i++)k[i]=(char)(toupper(k[i])); for(int i=0,j=0;i<len1;i++) { if(isupper(c[i])) { c[i]-=k[j]-'A'; j++; if(c[i]<'A')c[i]='Z'-('A'-c[i])+1; } else { c[i]-=k[j]-'A'; j++; if(c[i]<'a')c[i]='z'-('a'-c[i])+1; } if(j>len-1)j=0; } cout<<c; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具