有没有大佬解答一下为什么会乱码啊

P1914 小书童——凯撒密码

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 非常感谢!!!


|