oj错误之char型超出范围

在oj时遇到一个题

oj错误之char型超出范围

题目本身并不是很难,但在一个数据时出了错,刚开始一直没想通是哪里出了错

下面为源代码

#include <bits/stdc++.h>
using namespace std;
int n;
char s[];
int main()
{
scanf("%d",&n);
scanf("%s",s); for(int i=;s[i]!='\0';i++)
{
s[i]+=(n%);
if(s[i]>'z') s[i]-=;
}
printf("%s",s);
return ;
}

在输入为如下时,无法通过:

25

xyz

后面去查了ascii表发现,小写字母已经非常接近的末尾了

oj错误之char型超出范围

x+25后已经超出char型的127范围,根据汇编这里应该已经是一个负值了,再减去26也无济于事,所以导致产生错误

随后选择直接在‘a’的基础上计算位移,避免直接在char型上进行加减,成功AC

#include <bits/stdc++.h>
using namespace std;
int n;
char s[];
int main()
{
scanf("%d",&n);
scanf("%s",s); int ans;
for(int i=;s[i]!='\0';i++)
{
ans=(s[i]-'a'+n)%;
s[i]=ans+'a';
}
printf("%s",s);
return ;
}
上一篇:shell编程之BASH变量(2)


下一篇:2111: [ZJOI2010]Perm 排列计数