_TeaClaudz_ @ 2022-11-11 21:45:36
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
string s;
cin >> n >> s;
n %= 26;
for(int i = 0; i < s.size(); ++i) {
s[i] += n;
if(s[i] > 'z') s[i] = s[i] - 'z' - 1 + 'a';
else if(s[i] < 'a') s[i] = 'z' - ('a' - s[i]) + 1;
}
cout << s;
return 0;
}
by QMmh6R @ 2022-11-12 21:23:59
第四题可能n特别大;导致s[i]+=n;超越了127变成了负数;纯属猜测啦:D
by JqkQ2J @ 2022-11-17 17:13:41
我原来也是这个错了,这个我改成这个样子过了:
#include<bits/stdc++.h>
using namespace std;
int main(){
int b,c;
char a[51];
cin>>b>>a;
b=b%26;
int n=strlen(a);;
int i=0;
for(int i=0;i<n;i++){
if(a[i]+c>'z'){
a[i]=a[i]-26+b;
}else{
a[i]=a[i]+b;
}
cout<<a[i];
}
return 0;
}
我想了一下应该是因为是s[i]+n的时候直接直接超了ASCII码然后它就按中文码算了,我也确实最后输出了几个中文字符(比如输入12 和 we会出来'僸') 所以不能直接让a[i]=a[i]+b然后再处理,替换的话用一个ifelse就可以了 具体中文那些码怎么算我就不清楚了(本人菜鸟一枚)