弱弱求助。第四个测试点一直过不去。

P1914 小书童——凯撒密码

zxf1019 @ 2022-03-18 15:20:39


 #include<iostream>
 using  namespace std;
 #include<string>
 int main() {
    int a;
    cin>>a; 
    string s;
    cin>>s;
    a=a%26;
    for(int i=0;i<s.size();i++){
     s[i]=s[i]+a;
     if(s[i]>'z') s[i]=s[i]-26;
      }
      cout<<s;
  }

by zxy123bc @ 2022-03-18 15:48:58

@zxf1019

'z'+26>127

char越界了


by ayshudh @ 2022-03-20 08:51:40

用string呢?


by zxf1019 @ 2022-03-20 16:15:54

@zxy123bc 那应该怎么修正?


by zxy123bc @ 2022-03-20 16:26:52

@zxf1019

我的思路就是不直接加,用个for加 超过了就减掉26

缺点:慢,不过这个题数据小

题解里是说取余26也是一种思路 我觉得他那个好一点(他那个快),可以去题解里学学

我的代码:


#include <iostream>
#include <cstring>
using namespace std;
int main(){
    int n=0,len=0;
    char a[60];
    cin>>n;
    cin>>a;
    len=strlen(a);
    for (int i=0;i<len;i++){
        for (int j=0;j<n;j++){//就是这里,for代替加法
            a[i]++;
            if(a[i]>'z')
            a[i]-=26;
        }
    }
    for (int i=0;i<len;i++){
        cout<<a[i];}
    }

by zxy123bc @ 2022-03-20 16:28:34

@ayshudh

他用的就是string

string和char数组差不多

char爆的string基本都会爆


|