4/5求解

P1914 小书童——凯撒密码

howard234 @ 2024-11-14 10:30:17

请问这个代码五过四是为什么,我自己输入n大一点就无法输出了,我不知道为什么,求大佬解答

#include<stdio.h>
#include<string.h>

char * kaise(char*a,int n){
if(n>=26){
    n%=26;
}
for(int i=0;i<strlen(a);i++){
    a[i]=a[i]+n;
    if(a[i]>'z'){
        a[i]=a[i]-26;
    }
}

return a;
}
int main(){
    char a[100];
    int n;
    scanf("%d",&n);
    scanf("%s",a);
    kaise(a,n);
    printf("%s",a);
    return 0;
}

by Fiendish @ 2024-11-14 10:43:19

#include<stdio.h>
#include<string.h>

int main(){
    char a[100];
    int n;
    scanf("%d",&n);
    scanf("%s",a);
    for(int i=0;i<strlen(a);i++){
        printf("%c",(char)(((int)a[i]-'a'+n)%26+'a'));
    }
    return 0;
}

by Fiendish @ 2024-11-14 10:44:40

@howard234


by Fiendish @ 2024-11-14 10:44:56

我给的这份代码能过


by Fiendish @ 2024-11-14 10:54:39

问题应该是你直接给 a_i 加上 n,这样有可能超出了 ASCII 表的上限。

举个例子,ASCII 表中一共有 127 个字符,其中小写字母 s 是第 115 个,如果 n=13,那么 115+13=128>127,这个时候就会出现问题。

@howard234


by howard234 @ 2024-11-14 12:33:31

@Fiendish 谢谢,我刚刚翻题解的时候也听到过这个问题,感谢


|