80分,第4题WA求助!

P1914 小书童——凯撒密码

zyabc @ 2022-05-25 22:08:09

代码如下,考虑了n超过26以及+n大于'z'的情况,为什么第4题WA?


#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    char a;
    int n;
    cin>>n>>s;
    for(int i=0;i<s.size();i++)
    {
        s[i]=s[i]+(n%26);
        if(s[i]>'z') s[i]=s[i]-26;
        cout<<s[i];
    }
    return 0;
}

by suyi1111 @ 2022-06-05 18:37:09

如果移动位数超过Ascall码容量 就会使 x=a[i]+n;转化为未知字符 导致后续判断的转化x>'z'出现转化失败

输入:

25

zz

输出:


by Jiangjinggao @ 2023-04-07 15:37:57

AC代码:

#include<bits/stdc++.h>
using namespace std;
char s[100];
int main(){
    int n;
    scanf("%d%s",&n,s);
    for(int i=0;i<strlen(s);i++){
        s[i]=(s[i]-'a'+n)%26+'a';
    }
    cout<<s<<endl;
    return 0;
}

by Jiangjinggao @ 2023-04-07 15:38:30

没必要用if


|