80分蒟蒻,求助1

P1914 小书童——凯撒密码

GYP123 @ 2022-04-24 17:43:55

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
//对字符串向后取n个大小,n若大于26,取余 
//若加的字母大于'z'的处理:我是两个if(a[i]>='a'&&a[i]-n<='z'),在字母内,外else{a[i]=n-z-a[i]+'a' } 
int main()
{
    int n,p,i;
    char a[55];
    scanf("%d",&n);
    n=n%26;
    scanf("%s",a);
    p=strlen(a);
    for(i=0;i<p;i++)
    {
        if(a[i]>='a'&&a[i]-n<='z')
        {
            a[i]=a[i]+n;
            }   
        else
        {
            a[i]=n-('z'+a[i])+'a';
        }
    }
    printf("%s",a);
    return 0;
 } 

by Xy_top @ 2022-04-24 18:09:11

@GYP123,你的代码实在有点看不懂,给你提供一种简单思路:

把a变为1,b变为2,....z变为26,然后每个+ n % 26即可(+n后如果是26的倍数说明是z,就不要取余了)

最后再转换为原来的


by suyi1111 @ 2022-04-30 15:56:27

错了两个地方,第一个

if(a[i]>='a'&&a[i]-n<='z')

应为

if(a[i]>='a'&&a[i]+n<='z')

(a[i]-n改为a[i]+n)

第二个

a[i]=n-('z'+a[i])+'a';

应为

a[i]=(a[i]-'a'+n)%26+'a';

|