sdufezqh @ 2023-11-02 10:28:28
#include<stdio.h>
int main()
{
int n,i;
scanf("%d",&n);
char a[50];
scanf("%s",a);
for(i=0;i<50;i++)
{
if(a[i]==NULL)//如果出现空就跳出
break;
a[i]=a[i]+n;//加上n
while(a[i]>'z')//如果到了z后面,就减去26
a[i]=a[i]-26;
printf("%c",a[i]);//输出
}
return 0;
}
by 编码落寞 @ 2023-11-02 10:58:38
n可能比较大,循环不止一轮
by JW_LHL @ 2023-11-02 11:15:25
@编码落寞 嗯
by JW_LHL @ 2023-11-02 11:15:59
试试改成 long long
by sdufezqh @ 2023-11-02 12:06:01
谢谢
by sdufezqh @ 2023-11-02 12:12:56
@编码落寞 我考虑到了,所以我加个循环呀,谢谢
by ZWK210917 @ 2023-11-02 13:01:07
把13行改成a[i]=a[i]-'a'+n; 循环条件改成a[i]>'z'-'a' 再在输出前面加上a[i]+='a'; 就可以了。
by ZWK210917 @ 2023-11-02 13:03:48
就是先减掉'a',进行一番操作后再加上
by ZWK210917 @ 2023-11-02 13:12:34
在你的代码里如果n很大的话,ASCII码一超过127,它就会变成一个稀奇古怪的负值(具体啥原因导致的我也不知道)。
by sdufezqh @ 2023-11-02 13:21:41
@ZWK210917 谢谢大佬,AC了