QingQiu1 @ 2022-11-29 08:34:48
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int n;
char a[200];
cin>>n;
cin>>a;
int l=strlen(a);
for(int i=0;i<l;i++)
{
a[i]+=n;
if(a[i]>122) a[i]=a[i]-26;
cout<<a[i];
}
return 0;
}
测试数据:26 qwertyuiopasdfghjklzxcvbnm 输出:嫅e寧搹儔奱峝€亗剠啍抍恇垏 但是换成这个之后就没问题了,为什么呀?
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int n;
char a[200];
cin>>n>>a;
int l=strlen(a);
for(int i=0;i<l;i++)
{
if(a[i]+n>122) a[i]=a[i]+n-26;
else a[i]+=n;
cout<<a[i];
}
return 0;
}
by ud2_ @ 2022-11-29 08:42:29
char
范围小(通常是 -128 ~ 127 或者 0 ~ 255),第一段代码里 a[i] += n
会溢出。第二段代码里 a[i] + n
会先把两边转为 int
再运算,就不会溢出了。
by _Yvette_ @ 2022-11-29 08:45:36
第一个溢出了吧
by QingQiu1 @ 2022-11-29 16:19:08
@ud2_ 奥奥奥,谢谢!!
by QingQiu1 @ 2022-11-29 16:19:34
@Yvette 非常感谢!!!