超级好的题解
2025-04-15 21:03:22
发布于:辽宁
0阅读
0回复
0点赞
【解题步骤【核心部分】】
1.计算当前使用的密钥字符索引
2.统一转换为大写计算数值
3.转换为0-25的数值
4.解密计算 【公式:p_num = (c_num - k_num + 26) % 26】
5.恢复字符保留大小写
来自 https://www.acgo.cn/problemset/info/31
#include <bits/stdc++.h>
using namespace std;
int main() {
string key, cipher;
cin >> key >> cipher;
int key_len = key.size();
int cipher_len = cipher.size();
string plaintext;
for (int i = 0; i < cipher_len; ++i) {
// 计算当前使用的密钥字符索引
int key_idx = i % key_len;
// 统一转换为大写计算数值
char cipher_char = toupper(cipher[i]);
char key_char = toupper(key[key_idx]);
// 转换为0-25的数值
int cipher_num = cipher_char - 'A';
int key_num = key_char - 'A';
// 解密计算(注意+26保证非负)
int plain_num = (cipher_num - key_num + 26) % 26;
// 恢复字符并保留大小写
char plain_char = 'A' + plain_num;
if (islower(cipher[i])) {
plain_char = tolower(plain_char);
}
plaintext.push_back(plain_char);
}
cout << plaintext << endl;
return 0;
}
函数 功能
isupper() 检查是否为大写字母
tolower() 将大写字母转为小写
toupper() 将小写字母转为大写
isalpha() 检查是否为字母
这里空空如也
有帮助,赞一个