#4不过,蒟蒻求助

P1914 小书童——凯撒密码

_TeaClaudz_ @ 2022-11-11 21:45:36

#include<bits/stdc++.h>
using namespace std;

int main() {
    int n;
    string s;
    cin >> n >> s;
    n %= 26;
    for(int i = 0; i < s.size(); ++i) {
        s[i] += n;
        if(s[i] > 'z') s[i] = s[i] - 'z' - 1 + 'a';
        else if(s[i] < 'a') s[i] = 'z' - ('a' - s[i]) + 1;
    }
    cout << s;
    return 0;
}

by QMmh6R @ 2022-11-12 21:23:59

第四题可能n特别大;导致s[i]+=n;超越了127变成了负数;纯属猜测啦:D


by JqkQ2J @ 2022-11-17 17:13:41

我原来也是这个错了,这个我改成这个样子过了:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int b,c;
    char a[51];
    cin>>b>>a;
    b=b%26;
    int n=strlen(a);;
    int i=0;
    for(int i=0;i<n;i++){
        if(a[i]+c>'z'){
            a[i]=a[i]-26+b;
        }else{
            a[i]=a[i]+b;
        }
        cout<<a[i];
    }
    return 0;
}

我想了一下应该是因为是s[i]+n的时候直接直接超了ASCII码然后它就按中文码算了,我也确实最后输出了几个中文字符(比如输入12 和 we会出来'僸') 所以不能直接让a[i]=a[i]+b然后再处理,替换的话用一个ifelse就可以了 具体中文那些码怎么算我就不清楚了(本人菜鸟一枚)


|