hxj555 @ 2022-01-05 22:41:03
#include<stdio.h>
int main(){
char a[51];int n,i,t;
scanf("%d",&n);
scanf("%s",a);
for(i=0;a[i]!='\0';i++){
if(n>=26)n=n%26;
a[i]=a[i]+n;
if(a[i]>122)
a[i]=a[i]-26;
}printf("%s",a);
return 0;
}
by gling_myula @ 2022-01-05 23:25:47
翻了下之前的代码 我是等到它超过z就跳回a 你再试试
by gling_myula @ 2022-01-05 23:29:33
@hxj555
by hxj555 @ 2022-01-06 13:54:46
@haoyuan·Z 这个:if(a[i]>122) a[i]=a[i]-26; 这里就有,当它大于'z'就返回‘a’这个意思; 我也搞不懂为啥 当我输入的是12 z 输出的是奇奇怪怪的东西
by gling_myula @ 2022-01-06 19:57:05
我明白呀 我之前的代码是二重循环 你试以下在中间输出一下
by gling_myula @ 2022-01-06 20:14:00
@hxj555
#include<bits/stdc++.h>
using namespace std;
int main(){
char a[51];int n,i,t;
scanf("%d",&n);
scanf("%s",a);
for(i=0;i<strlen(a);i++){
if(n>=26)n=n%26;
//你的代码在这加的输出的是-122(因为z这种快超限了,超限之后他就会往回倒
if(a[i]+n>122)
a[i]=a[i]-26+n;
else a[i]=a[i]+n;
cout<<a[i];
}
return 0;
}//这样就ac了
记得改改 以免棕名(我这个提交过了 下面是我之前的代码 可以看看
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string s;//用字符串就行啦
int n,i,j;
cin>>n;
cin>>s;
for(i=0;i<s.size();i++)
{
for(j=1;j<=n;j++)//二重不会超时哒
{
s[i]++;
if(s[i]>'z')//到z就返回a~
s[i]='a';
}
}
cout<<s;
return 0;//完美ac
}//个人认为这种比较简洁好想 也不用背ascii码~~~
by hxj555 @ 2022-01-06 20:46:30
@haoyuan·Z 好哒好哒 谢谢啦。我今天也想到为啥会出现这个乱码了,当a[i]+n>127的时候 得考虑补码。所以,我改进了一下我的代码也通过拉