求帮助,只过了6个
查看原帖
求帮助,只过了6个
767267
XCDHHYN楼主2022/8/5 21:58

我先存原图,然后反操作存对应明文

#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#include <cmath>
using namespace std;
string M,k,C;
char key[30][30];
map<char,map<char,char> > m;
int cnt;
void start(){
	for(int i=0;i<26;i++){
		for(int j=0;j<26;j++){
			if('A'+i+j<='Z') key[i][j]='A'+i+j;
			else key[i][j]=2*'A'+i+j-'Z'-1;
		}
	}
}
void shift(){
	for(int i=0;i<26;i++){
		for(int j=0;j<26;j++){
			char x='A'+i; 
			char y=key[i][j];
			if(x<=y) m[x][y]='A'+y-x;
			else m[x][y]='Z'-(x-y-1);
		}
	}
}
int main(){
	cin>>k>>C;
	start();
	shift();
	for(int i=0;i<C.size();i++){
		int flag=0;
		if(k[i]>='a'&&k[i]<='z') k[i]-='a'-'A';
		if(C[i]>='a'&&C[i]<='z') C[i]-='a'-'A';
		else flag=1;
		if(flag) cout<<m[k[cnt]][C[i]];
		else cout<<char(m[k[cnt]][C[i]]+'a'-'A');
		cnt++;
		if(cnt==k.size()) cnt=0; 
	}
	return 0;
} 
2022/8/5 21:58
加载中...