救命!!!

P1079 [NOIP2012 提高组] Vigenère 密码

```cpp #include<iostream> using namespace std; string C,M,k; int tmp; int main() { getline(cin,k); getline(cin,C); for(int i=0;i<k.size();i++) { if(k[i]>='A'&&k[i]<='Z') { k[i]+=32; } } for(int i=0;i<C.size();i++) { if(C[i]>='A'&&C[i]<='Z') { if(C[i]-(k[tmp]-97)<65) { M+=(char)(C[i]-(k[tmp]-97)+26); } else { M+=(char)(C[i]-(k[tmp]-97)); } } else { if(C[i]-(k[tmp]-97)<97) { M+=(char)(C[i]-(k[tmp]-97)+26); } else { M+=(char)(C[i]-(k[tmp]-97)); } } tmp++; if(tmp==k.size()) { tmp=0; } } cout<<M<<endl; return 0; } ``` 看一下我的,注意,我的代码有部分地方写复杂了,可以自行改一改,不懂可以私信问我
by Rieman_sum @ 2023-12-04 19:17:28


@[Guo1](/user/743879) 谢谢
by Star_Sky_ @ 2023-12-05 14:51:29


话说最简单的是我这个吧: ```cpp #include<bits/stdc++.h> using namespace std; char s[1011],m[1011],k[111]; void ss(){ int mod=strlen(k); for(int i=0;i<strlen(m);i++){ bool q=1; if(m[i]<='Z') q=0; if(q) m[i]-=32; if(k[i%mod]>'Z') k[i%mod]-=32; s[i]=m[i]-k[i%mod]+26;//小的-大的会成负数 s[i]%=26; if(!q) cout<<char(s[i]+'A'); else cout<<char(s[i]+'a'); } } int main(){ cin>>k>>m; ss(); return 0; } ```
by yhdxg @ 2023-12-23 11:38:31


|