求助!!!

P1914 小书童——凯撒密码

cdllang @ 2016-12-01 13:45:45

#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
    string s;//s为原密码字符串 
    long long int n;//a为移动字母数 
    cin>>n;
    cin>>s;
    n=n%26;
    for(int i=0;i<s.size();i++)
    {
        s[i]=s[i]+n;
        while(s[i]<97){s[i]=s[i]+26;};
        while(s[i]>122){s[i]=s[i]-26;};
    } 
    cout<<s;
    return 0;
}

不知道为什么,当输入 25 abcdefghijklmn.....xyz的时候

输出的结果直接跳过了fghi

不明嚼栗。。。。。


by AnnieL @ 2016-12-18 09:30:48

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;
char words[100];
int n;
int main(){
    int tmp[100];
    scanf("%d",&n);
    scanf("%s",&words);
    n%=26;
    int len=strlen(words);
    for(int i=0;i<len;i++)tmp[i]=words[i];
    for(int i=0;i<len;i++){
        tmp[i]+=n;
        if(tmp[i]>122)
            tmp[i]-=26;
        printf("%c",tmp[i]);
    }
    return 0;
}

好像直接用string做加减会出错

但是把里面的每一个字母对应的ASCII码存到一个数组里面加减就不会出错了


|