大佬们,请问这个为什么不对,谢谢,我用编译器试着我错的测试点是对的

P1914 小书童——凯撒密码

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了


|