凯撒c语言算法有什么问题

来源:百度知道 编辑:UC知道 时间:2024/06/27 04:58:33
#include <stdio.h>
main()
{
char M[100];
char C[100];
char A[100];
int K=404,i;
k=k%26;
printf("输入明文:");
gets(M);
for(i=0;M[i]!='\0';i++)
C[i]=(M[i]-'a'+K)%26+'a';
C[i]='\0';
printf("加密后:%s\n",C);
for(i=0;C[i]!='\0';i++)
A[i]=(C[i]-'a'-K)%26+'a';
A[i]='\0';
printf("解密后:%s\n",A);
}
运行时有问题~
解密后结果总不对
而且这句k=k%26;有问题、
请问高手解答
我修改之后如下
include <stdio.h>
#include <string.h>
main()
{
char M[100];
char C[100];
char A[100];
int k,i;
printf( "输入密钥k: ");
scanf("%d",&k);
printf("输入明文:");
gets(M);
for(i=0;M[i]!='\0';i++)
C[i]=(M[i]-'a'+K)%26+'a';
C[i]='\0';
printf("加密后:%s\n&q

唉,美女,怎么不打分啊,我等好久了,提供售后服务也不容易。

你没有发现你程序中的前两个k是小写,后两个K是大写到吗?c语言的标志符是区分大小写的。我下面的程序是对的,你复制下来试试!

不要用你的程序,用我下面的程序复制了去,编译运行即可,你的程序中有个k是小写,有的是大写,会出现编译错误。把我下面的程序复制过去即可。

好了,在C[i]-'a'-K后加一个26即可,原因是C[i]-'a'-K后可能是负数,然后在计算会出现错误,加了26不会是负数了,且模26后结果不变。程序如下:

#include <stdio.h>
main()
{
char M[100];
char C[100];
char A[100];
int K=404,i;
K=K%26;
printf("输入明文:");
gets(M);
for(i=0;M[i]!='\0';i++)
C[i]=(M[i]-'a'+K)%26+'a';
C[i]='\0';
printf("加密后:%s\n",C);
for(i=0;C[i]!='\0';i++)
A[i]=(C[i]-'a'-K+26)%26+'a';
A[i]='\0';
printf("解密后:%s\n",A);
}

KKKK啊.......
-_-!