救我!!!C++大佬!!

P1914 小书童——凯撒密码

Phenothalin @ 2017-08-28 21:58:30

#include<iostream>
#include<cstring>
using namespace std;
char bala(char a,int n)
{
    a+=n;
    if(a>122) a-=26;
    a=char(a);
    return a;
}
int main()
{
    char a[1000];
    int n;
    cin>>n>>a;
    for(int i=0;i<=strlen(a)-1;i++)
    {
        a[i]=bala(a[i],n);
    }
    cout<<a;
    return 0;
}

哪里的问题???? 听说ASCII只能到z后五位??

但是我int转换了啊??

char的时候不会超啊??

但是比较小的数的确行??

懵逼。。

大佬救我。。。


by ezоixx130 @ 2017-08-28 22:08:30

char bala(char a,int n)
{
    if(int(a)+n>122) a-=26;
    a+=n;
    a=char(a);
    return a;
}

by Windows_XP @ 2017-08-28 22:23:22

为什么要a = (char)a。。


by Windows_XP @ 2017-08-28 22:24:55

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n; char c; cin>>n; n%=26;
    while(scanf("%c",&c)!=EOF) if(c>='a' && c<='z') cout<<(char)((c-'a'+n)%('z'-'a'+1)+'a');
    return 0;
}
//我及其随意的贴了个代码

by Windows_XP @ 2017-08-28 22:26:42

减去a再膜26再加上a就行了(脑残少写一行)


by Phenothalin @ 2017-08-29 14:54:02

@WindowsXP456

大佬写的看不懂hhhh(捂脸笑哭)。。

我还只是一个学了一个周的蒟蒻。。。hhh


by Windows_XP @ 2017-08-30 13:16:30

@Phenothalin

如果你看不懂代码也可以不看。。。

设一个字母为 zimu(hhh) 我们设这个 zimu 的ascii码等于 'a'+x 显然 x>=0&&x<26,我们移动的相当于是x,当x=25时zimu=='z',当x==26时,应该让x等于0。

所以我们先把 (int)zimu -='a',再膜26,再加上'a'。操作起来就是(c-'a'+n)%('z'-'a'+1(加一是非常必要的))+'a'。


by Phenothalin @ 2017-08-30 13:24:57

@WindowsXP456 、

大佬……大佬…………

明白了……

不过新手村的题依旧都不会………………没有会的……


by Windows_XP @ 2017-08-30 22:11:07

@Phenothalin

不会你就看题解,如果不懂你就抄题解,抄了一遍如果还是不懂就再抄一遍,如果还是不懂就再抄一遍,你一直抄下去,总有一年你将会懂,加油。(hhh)


|