80分 哪里出问题了 求大神解题

P1914 小书童——凯撒密码

aniuge @ 2017-05-03 18:19:57

#include<iostream>
using namespace std;
char a[2000];
 int n,i;
int main()
{
    cin>>n;
    n%=26;
    cin>>a;
    for(i=0;a[i]!='\0';i++)
    {
        a[i]=a[i]+n;
        if(a[i]>'z') a[i]=a[i]-26;
        if(a[i]<'a') a[i]=a[i]+26;
    }
    for(i=0;a[i]!='\0';i++)
        cout<<a[i];
    return 0;
}

by doge233 @ 2017-05-03 18:51:01

有大写转小写和加完以后数值可能超出char的上界


by W_px @ 2017-07-04 16:17:36

@doge233 是的。

应该在这之前预判一下,不然的话会输出�����。(比如:25 zzzzz)

【代码已上线】

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s;
    int n;
    cin>>n>>s;
    int x=s.length();
    for(int k=0;k<=x;k++)
    {
        if(char(int(s[k])+n%26-26)<'a')s[k]=char(int(s[k])+n%26);
            else s[k]=char(int(s[k])-26+n%26);
    }
    cout<<s;
    return 0;
}

by doge233 @ 2017-07-12 00:09:05

@W_px 第一次被@感谢感谢


|