公式中的 mod 28看起来似乎多余
#include <iostream>
#include <memory.h>
#include <cstring>
#include <cstdio>
#define MAX 100
char str[MAX],table[MAX+30],rTable[MAX],plainText[MAX];
int k;
void init(){
int i=1;
table['_']=0,table['.']=27;
rTable[0]='_',rTable[27]='.';
for (char t='a';t<='z';++t,++i)table[t]=i,rTable[i]=t;
}
int main(){
init();
int i;
while (scanf("%d",&k)&&k)
{
memset(plainText,0,sizeof(plainText));
scanf("%s",str);
int len=strlen(str);
for (i=0;i<len;++i)
{
plainText[(k*i)%len]=rTable[(table[str[i]]+i)%28];
}
printf("%s\n",plainText);
}
}