/ 加密、解密算法 //
#include<stdio.h>
#include<conio.h>
void main()
{
char a[100];
int k,i;
printf("/n请输入移位值K和明文(小写字母并以‘#’结束):/n/n ");
scanf("%d/n",&k);//输入密码K
if(k>26) //移位超出26时,相当于重复循环
k=k%26;
for(i=0;i<100;i++)
{
scanf("%c",&a[i]); //输入明文
if(a[i]=='#')
break;
}
printf("/n密文为 :");
for(i=0;a[i]!='#';i++)
{
if(a[i]<97||a[i]>122)
{
printf("/n移位值K格式出错或明文输入错误,无法显示密文!程序将退出!/n");
return;
}
}
for(i=0;a[i]!='#';i++)
{
if(k>0)
{
a[i]=a[i]-32;
if(k>90-a[i])
a[i]=65+(k-(90-a[i]))-1;
else
a[i]=a[i]+k; //非循环情况是转换成大写后,加上移位密码
}
else
{
k=-k;
if(k>26) //移位超出26时,相当于重复循环
k=k%26;
a[i]=a[i]-32;
if(k>a[i]-65)
a[i]=90-(k-(a[i]-65))-1;
else
a[i]=a[i]-k;
k=-k;
}
printf("%c",a[i]);
}
printf("/n");
k=0;
printf("/n请输入移位值K和密文(大写字母,以‘#’结束):/n/n ");
scanf("%d/n",&k);
if(k>26)
k=k%26;
for(i=0;i<80;i++)
{
scanf("%c",&a[i]);
if(a[i]=='#')break;
}
printf("/n明文如下 :");
for(i=0;a[i]!='#';i++)
{
if(a[i]<65||a[i]>90)
{
printf("/n移位值K格式出错或密文输入错误,无法显示明文!将退出程序!/n");
return;
}
}
for(i=0;a[i]!='#';i++)
{
if(k>0)
{
a[i]=a[i]+32;
if(k>a[i]-97)
a[i]=122-(k-(a[i]-97))+1;
else
a[i]=a[i]-k;
}
else
{
k=-k;
if(k>26)
k=k%26;
a[i]=a[i]+32;
if(k>122-a[i])
a[i]=97+(k-(122-a[i]))+1;
else
a[i]=a[i]+k;
k=-k;
}
printf("%c",a[i]);
}
printf("/n");
getch();
}