思路
观察输入,密码即为各个的ascii码经过运算后的字母
- 注意判断大小写是有等于号(0分的教训~~~~~)
代码
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
char k[105],a[1005],b[1005];
int k2[105],chart[30][30];
int To_num(char p){
if(p>='A' && p<='Z') return (int)p-64;
return (int)p-96;
}
int main()
{
// freopen("vigenere.in","r",stdin);
// freopen("vigenere.out","w",stdout);
scanf("%s",k+1);k[0] = ' ';
scanf("%s",b+1);b[0] = ' ';
int lenk = strlen(k),lenb = strlen(b);--lenk;--lenb;
for(int i=1; i<=lenk; i++)
k2[i] = To_num(k[i]);
int id = 1;
for(int i=1; i<=lenb; i++){
id %= lenk;
if(id == 0) id = lenk;
int s = To_num(b[i])-k2[id]+1;
if(s <= 0) s += 26;
if(b[i]>='A'&&b[i]<='Z') printf("%c",s+64);
else printf("%c",s+96);
id++;
}
return 0;
}