C语一道小问题

来源:百度知道 编辑:UC知道 时间:2024/05/02 02:53:41
有一行电文,已按下面规律译成密码.
A-Z a-z
B-Y b-y
C-X c-x
即第一个字母变成第26字母,第i个字母变成第(26-i+1)个字母,非字母字符不变.要求编程将密码译回原文,并输出密码和原文.

规则:第i个字母变成第(26-i+1)个字母。
分析可知加密和解密的规则相同。
设:原字母s[j], 转成字母t[j]。 (以下分析以小写字母为例)
则:原字母s[j]为: 第 i = s[j]-'a'+1 个字母
转成字母t[j]为:第 26-i+1 = 26-(s[j]-'a'+1)+1个字母
按第i个字母的ASCII码为:i+'a'-1
转成字母t[j]的ASCII码为:(26-(s[j]-'a'+1)+1)+'a'-1
即:t[j] = (26-(s[j]-'a'+1)+1)+'a'-1
= 26-s[i]+'a'-1+1+'a'-1
= 2*'a'+25-s[i]
= 'a'+'z'-s[i]

main()
{
int i;
char s[81],tran[81];
gets(s);

for(i=0;s[i];i++)
if(s[i]>='A' && s[i]<='Z')
tran[i]='A'+'Z'-s[i];
else if (s[i]>='a' && s[i]<='z')
tran[i]='a'+'z'-s[i];
else
tran[i]=s[i];
tran[i]=s[i];

puts(s);
puts(tran);
}

一样的原理译回去不行么