60分可能的错误原因

P1914 小书童——凯撒密码

安妮007 @ 2017-07-15 11:52:48

题目有两个比较坑的地方:

1、输入的n不一定保证在26以内,所以在输入时要把n对26取模(n=n%26,保证n在0到25这个区间内)

2、然后就是z的ASCII码是122,如果输入一个像25这样的数字,超过ASCII码最大的表达范围127,最后可能不知道会给你输出什么

AC的代码:

#include<iostream>
#include<cstring>
using namespace std;
char w[1000007];
int main(){
    int n=0;
    cin>>n;
    cin>>w;
    if(n>=26)
    {
        n=n%26;
    }
    int h=strlen(w);
    for(int i=0;i<h;i++)
    {
        if('a'<=w[i]&&w[i]<='z'-n)
        {
            w[i]+=n;
        }
        else
        {
            w[i]=w[i]-26+n;
        }
    }
    for(int i=0;i<h;i++)
    {
        cout<<w[i];
    }
    return 0;
}

by 798853158dfw @ 2017-07-21 16:54:51

将字符串分段,转ascll,加n,减‘a’的ascll,除以26,最后加‘a’的ascll,即可


|