给定一串字符,把其中每个大写字母变换成按顺序向后移N位的字母,遇到26个字母结束要环回到字母A计算顺序,其他字符不变。
【样例输入】
3
ABC123&*XYZ
【样例输出】
DEF123&*ABC
/*
凯撒密文
本题测试点总结:
①输入的n值,需要对26取模,因为n的值有可能在26的绝对值之外;
②n值为负数或正数时,需要判断一下,如果小于0,则加上26,如果大于零,不要加上额外的26;
*/
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
int n,i;
char ch1[100]={0};
cin>>n;
gets(ch1);
n = n%26;
int len1 = strlen(ch1);
for(i=0;i<len1;i++)
{
if(ch1[i]>='a'&&ch1[i]<='z')
{
if(n>=0) ch1[i] = ((ch1[i]-'a') + n)%26+'a';
else if(n<0) ch1[i] = ((ch1[i]-'a') + n+26)%26+'a';
}
else if(ch1[i]>='A'&&ch1[i]<='Z')
{
if(n>=0) ch1[i] = ((ch1[i]-'A') + n)%26+'A';
else if(n<0) ch1[i] = ((ch1[i]-'A') + n+26)%26+'A';
}
}
ch1[i] = '\0';
printf("%s",ch1);
return 0;
}
/*
凯撒密文
本题测试点总结:
①输入的n值,需要对26取模,因为n的值有可能在26的绝对值之外;
②n值为负数或正数时,需要判断一下,如果小于0,则加上26,如果大于零,不要加上额外的26;
*/
#include <stdio.h>
#define N 100
int main()
{
int n;
char a[N];
scanf("%d", &n);
n %= 26;
if (n < 0)
n += 26;
scanf("%s", a);
char *p = a;
while (*p)
{
if (*p >= 'A' && *p <= 'Z')
*p = 'A' + (*p - 'A' + n) % 26;
p++;
}
printf("%s", a);
return 0;
}
cin >> n;
getchar();
gets(ch1);