就是利用公式反向求解,主要是mod的处理!
<span style="font-size:18px;">#include<stdio.h>
#include<string.h>
int get_plaincode(int ciphercode,int i);
int main()
{
int k;
scanf("%d",&k);
while(k!=0)
{
char str[71],string[71];
int len,i,j;
int ciphercode,plaincode;
scanf("%s",str);
len = strlen(str);
for(i = 0;i < len;i++)
{
j = (k * i) % len;
ciphercode = str[i] - 96;
if(str[i]=='_')
{
ciphercode = 0;
}
if(str[i]=='.')
{
ciphercode = 27;
}
plaincode = get_plaincode(ciphercode,i);
if(plaincode==0)
{
string[j] = '_';
}
else if(plaincode==27)
{
string[j] = '.';
}
else
{
string[j] = plaincode + 96;
}
}
string[len] = '\0';
puts(string);
scanf("%d",&k);
}
return 0;
}
int get_plaincode(int ciphercode,int i) //对mod处理
{
int t = ciphercode + i;
if(t < 0)
{
while(t < 0)
{
t += 28;
}
}
else if(t > 27)
{
while(t > 27)
{
t-=28;
}
}
return t;
}
</span>