最近花了五天時(shí)間把the C. programming language看了一遍,今天開始刷題。這道題講的是各處密鑰key和密文,已知加密公式,求出原文。題很水,只要把加密公式反過來就行了。
#include<stdio.h>
#include<string.h>
int main()
{
void changetonum(char ci[],int len);
void numtochar(char pl[],int len);
int i,j,k;
scanf("%d",&k);
while(k!=0)
{
char ci[100],pl[100];
int len;
scanf("%s",ci);
len=strlen(ci);
changetonum(ci,len);
for(i=0;i<len;i++)
{
pl[k*i%len]=(ci[i]+i)%28;
}
pl[i]='\0';
numtochar(pl,len);
puts(pl);
scanf("%d",&k);
}
}
void changetonum(char ci[],int len)
{ //該函數(shù)用于把密文轉(zhuǎn)化為數(shù)字
int i;
for(i=0;i<len;i++)
{
if(ci[i]>='a'&&ci[i]<='z')
{
ci[i]=ci[i]-'a'+1;
}
else if(ci[i]=='_')ci[i]=0;
else if(ci[i]=='.')ci[i]=27;
}
}
void numtochar(char pl[],int len)
{ //用于把解密后的數(shù)字轉(zhuǎn)化為原文
int i;
for(i=0;i<len;i++)
{
if(pl[i]>=1&&pl[i]<=26)pl[i]=pl[i]+'a'-1;
else if(pl[i]==0)pl[i]='_';
else if(pl[i]==27)pl[i]='.';
}
}
要特別注意的是一定要用一個(gè)變量len記錄原字符串長(zhǎng)度,因?yàn)樵谵D(zhuǎn)換過程中可能會(huì)出現(xiàn)0('_'對(duì)應(yīng)的數(shù)字就是0),這樣的話調(diào)用strlen函數(shù)就無(wú)法得出正確的長(zhǎng)度。
posted on 2011-08-13 16:14
小鼠標(biāo) 閱讀(267)
評(píng)論(0) 編輯 收藏 引用