既然密文是由明文转化而来,反向转换就行,再判断过范围没。
#include<bits/stdc++.h>
using namespace std;
char q[110],w[1010];
int n,ha[110];
int sf(char z){
if(z<='Z') return z-'A';
return z-'a';
}
int main(){
// freopen("vigenere.in","r",stdin);
// freopen("vigenere.out","w",stdout);
gets(q);
n=strlen(q);
for(int z=0;z<n;++z) ha[z]=sf(q[z]);
gets(w);
for(int z=0;z<strlen(w);++z){
if(w[z]<='Z'&&w[z]-ha[z%n]<'A') w[z]+=26;
else if(w[z]>'Z'&&w[z]-ha[z%n]<'a') w[z]+=26;
w[z]-=ha[z%n];
printf("%c",w[z]);
}
}