安妮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,即可