jinyifei @ 2021-05-28 13:08:01
3,4点都错了......
#include<bits/stdc++.h>
using namespace std;
int main()
{
string n;
int m;
cin>>m>>n;
int p=m;
for(int i=0;i<n.size();i++)
{
if(m>26) m=m%26;
n[i]=int(n[i])+m;
if(n[i]>122) n[i]=int(n[i])-p/26*26;
cout<<char(n[i]);
}
return 0;
}
蒟蒻不胜感激!!!泪奔
by 听取OLE声一片 @ 2021-05-28 13:25:46
主页双帖,危
by PY_Fighter @ 2021-05-28 14:21:43
1.n[i]=int(n[i])-p/26*26;
你这个p是什么鬼……已经和原来的m没关系了呀
可以给你举个反例 n[i]='z',m=1,你的程序就不对了呀
因为m已经对26取模过了,m一定<26,所以你只需要n[i]-=26就可以了
2.但此时还是不对~因为n[i]+m的范围可能会超过ASCLL码的范围(0~127),所以会炸
应该在+m之前提前判断是否需要-26
给你改好的代码如下
#include<bits/stdc++.h>
using namespace std;
int main()
{
string n;
int m;
cin>>m>>n;
int p=m;
for(int i=0;i<n.size();i++)
{
if(m>26) m=m%26;
if(n[i]+m>122) n[i]=n[i]+m-26;
else n[i]=n[i]+m;
cout<<char(n[i]);
}
return 0;
}
(C++里面不同类型的变量可以直接进行运算(会自动转成int类型运算),不用int或者char)
by PY_Fighter @ 2021-05-28 14:33:14
@jinyifei
by jinyifei @ 2021-05-29 09:04:58
@PY_Fighter
谢谢你 我发现我比蒟蒻还蒻嘤
by PY_Fighter @ 2021-05-29 09:35:12
@jinyifei 没错蒟蒻就是我