Description
小鑫在高中的时候喜欢上了一个十分漂亮的女孩。那个女孩也很喜欢他,就答应成为他的女朋友。
但是大家都知道高中的生活是忙碌的,除了上课就是上课,有时候可能连课间时间都被老师占用。于是小鑫想出了在上课给女朋友传纸条的方法来表达自己的爱慕。
又但是她与小鑫之间的距离太远,中间必须通过同学来传递纸条。可他们并不想让同学们知道写的什么就想到加密纸条这种方法。方法如下:
他们每天都会约定加密常数n,举个例子,当n=1时,今天写的每一句话中所用的字母都会向后+1,比如:i love you就成了j mpwf zpv ,当然了当是z的时候,+1就等于a。
请你帮他女朋友解密他写的纸条么?
Input
输入为多组,每组为两行。
第一行为n,-50<n<50
第二行为一句话,只有小写字母和空格。长度小于10000
Output
输出解密之后的内容
Sample
Input
1 j mpwf zpv
Output
i love you
Hint
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <stdio.h>
#include <vector>
using namespace std;
/*
1.定义字符数组str[10001],偏移量n(n可以控制加密解密,n为解密,n取反为加密);
2.多组输入n,cin.geline()输入str,并且要吃掉回车,再根据偏移量n求余量为m
3.1遍历字符串,对于所有的字母(if语句),分三种情况处理,当偏移后仍在'a'~'z',直接修改
3.2当偏移后超过'z‘的,处理为 str[i]+m-'z'+'a'-1 | (str[i]+m-'z'是当前字符和'z'的间隔,-1是因为z到a也存在一个间隔)
3.3当偏移量低于'a’的,处理为 'z'-'a'+str[i]+m+1 | 也是因为间隔所以少减1
4.输出新串
*/
int n,m;
char str[10001];
int main()
{
while(cin>>n)
{
n=-n;
getchar();
cin.getline(str,10001);
m=n%26;
for(int i=0; str[i]!='\0'; i++)
{
if(str[i]>='a'&&str[i]<='z')
{
if(str[i]+m>='a'&&str[i]+m<='z')
{
str[i]=str[i]+m;
}
else if(str[i]+m>'z')
{
str[i]=str[i]-'z'+'a'+m-1;
}
else
{
str[i]='z'-('a'-str[i]-m)+1;
}
}
}
printf("%s\n",str);
}
return 0;
}