只有60分

P1914 小书童——凯撒密码

古月小哥哥 @ 2019-06-15 17:07:41


#include<iostream>
#include<string>
using namespace std;
char change(string a,int i);
int main()
{
    string a;
    int n,len,i;
    cin>>n>>a;
    len=a.length();
    for(i=0;i<len;i++)
    {
        a[i]=a[i]+n;
        for(;a[i]>'z';)
        a[i]=a[i]-26;
    }
    cout<<a;
    return 0;

 } 

by    吾皇 @ 2019-06-15 17:20:47

个人是这样做的
#include<bits/stdc++.h>
using namespace std;
char change(char n,int x){
    if(n+x>'z') return n+x-26;
    else return n+x;
}

int main(){
    string a;
    int n,len,i;
    cin>>n>>a;
    len=a.length();
    for(i=0;i<len;i++) cout<<change(a[i],n);
    return 0;
}

by KGB1331 @ 2019-06-15 17:22:29

ASCII最大值只有127,a[i]+n如果大于127就会报错,之后减也没用。 先判断是不是加上后会超过z就可以解决问题。


by    吾皇 @ 2019-06-15 17:23:33

按照你的做法的话建议先判断a[i]+n是否大于‘z’,再考虑怎么加

代码:

#include<iostream>
#include<string>
using namespace std;
char change(string a,int i);
int main()
{
    string a;
    int n,len,i;
    cin>>n>>a;
    len=a.length();
    for(i=0;i<len;i++)
    {
        if(a[i]+n>'z') a[i]=a[i]+n-26;
        else a[i]=a[i]+n;
    }
    cout<<a;
    return 0;

 } 

by KGB1331 @ 2019-06-15 17:24:59

#include<iostream>
#include<cstring>
using namespace std;
char s[9990091];    //char数组会舒服点 
int main()
{
    int n;
    scanf("%d%s",&n,&s);
    for(int i=0;i<strlen(s);i++)
    {
        if(s[i]+n>122)s[i]=s[i]+n-26; //先判断是不是加炸了 
        else s[i]+=n;
    }
    printf("%s",s);
    return 0;
 } 

by KGB1331 @ 2019-06-15 17:27:47

@古月小哥哥

忘记加stdio.h了,见谅

by 古月小哥哥 @ 2019-06-15 17:38:05

@吾皇 要是一次判断之后a[]的值还是大于‘z'


|