共 2 行。
第一行为一个字符串,表示密钥 k ,长度不超过 100 ,其中仅包含大小写字母。
第二行为一个字符串,表示经加密后的密文,长度不超过 1000 ,其中仅包含大小写字母。
一个字符串,表示输入密钥和密文所对应的明文。
对于 100%的数据,输入的密钥的长度不超过 100 ,输入的密文的长度不超过 1000 ,且都仅包含英文字母。
#include<iostream> #include<string.h> using namespace std; int main() { char s1[100],s2[1000],s3[1000]; cin>>s1>>s2; int j = 0,i; int max = strlen(s1); for(i=0;i<strlen(s2);i++) { if(s2[i]>=‘a‘&&s2[i]<=‘z‘) { if(s1[j]>=‘a‘&&s1[j]<=‘z‘) { s3[i] = ‘a‘ + (26 + (s2[i] - ‘a‘) - (s1[j] - ‘a‘))%26; } else if(s1[j]>=‘A‘&&s1[j]<=‘Z‘) { s3[i] = ‘a‘ + (26 + (s2[i] - ‘a‘) - (s1[j] - ‘A‘))%26; } } else if(s2[i]>=‘A‘&&s2[i]<=‘Z‘) { if(s1[j]>=‘a‘&&s1[j]<=‘z‘) { s3[i] = ‘A‘ + (26 + (s2[i] - ‘A‘) - (s1[j] - ‘a‘))%26; } else if(s1[j]>=‘A‘&&s1[j]<=‘Z‘) { s3[i] = ‘A‘ + (26 + (s2[i] - ‘A‘) - (s1[j] - ‘A‘))%26; } } j = (j+1)%max; } for(i=0;i<strlen(s2);i++) cout<<s3[i]; }
1.比如要让数字在5~8之间循环 x 为初始位置 n为移动单位 4为元素个数 5为初始元素
加: 5 + ((x - 5)+ n)%4
减: 5 + (4 + (x - 5)- n ) %4
2.直接输出时可能后面会输出空字符,最好控制输出的位数
原文:https://www.cnblogs.com/miliye/p/10209161.html