u55545554 @ 2018-07-20 15:49:56
/*蒟蒻虽然忘记密码,但他还记得密码是由一串字母组成。且密码是由一串字母每个向后移动n为形成。z的下一个字母是a,如此循环。
他现在找到了移动前的那串字母及n,请你求出密码。(均为小写)
输入格式:
第一行:n。第二行:未移动前的一串字母
输出格式:
一行,是此蒟蒻的密码*/
#include<iostream>
#include<cstring>
using namespace std;
int main(){
char zimu[27],z='a';
for(int i=1;i<=26;i++){
zimu[i]=z;
(int)z++;
}
string s;int n;//s:要移动的那串字母 n:移动的位数
cin>>n>>s;//输入
int l=s.length();//l存储字符串s的位数
char a[l+1];//定义a字符数组存储输入的字母
strncpy(a,s.c_str(),s.length()); //把字符串s拷贝到a字符数组里
n=n%26;//防止超出26个字母
if(n!=0){
for(int i=0;i<l;i++){//n=1 z=26------1+26=27 zimu[27-26]=a
a[i]=((int)a[i])+n;//共有128个ASCII码//z的ASCII:122 122=122+1=123
if((int)a[i]>122){a[i]=zimu[((int)a[i]-96)-26];}//123=zimu[2] z>25
}
}
for(int i=0;i<l;i++)cout<<a[i];
return 0;
}
没有问题啊 z往后移动25位应该是y,我的程序没有问题,测试输入25和z却不输出
by u55545554 @ 2018-07-20 15:51:44
输入6 z一直到25 z都不输出了
by u55545554 @ 2018-07-20 16:23:17
已经过了谢谢大家 加个特判即可
if((int)a[i]+n>128){
a[i]=zimu[n-(122-(int)a[i])];
continue;
}