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';