A31.Vigenère 密码 题解
2026-05-31 12:50:11
发布于:浙江
10阅读
0回复
0点赞
可以看到这题是普及-,难度仅在于找规律。
Vigenère 密码的密码表可以视作字符ASCII码的加减运算,返回时注意大小写哦~
#include<bits/stdc++.h>
using namespace std;
char m[1005],k[1005];
char D(char a_,char b_){ // 解码函数,a_表示密文、b_表示密钥
int a=a_,b=b_,c;
bool a0=0;
if(a>=97) a-=97,a0=1;
else if(a>=65) a-=65;
if(b>=97) b-=97;
else if(b>=65) b-=65;
c=a-b;
if(c<0) c+=26; // 处理借位情况
if(c<97 && a0) c+=97;
if(c<65 && !a0) c+=65;
if(c>122 && a0) c-=26;
if(c>90 && !a0) c-=26;
return c;
}
int main(){
cin>>k>>m;
int len=strlen(m);
int leh=strlen(k);
for(int i=0;i<len;i++){
k[i]=k[i%leh];
char x=D(m[i],k[i]);
cout<<x;
}
}
这里空空如也







有帮助,赞一个