[1402] 一本通 Vigenère密码

这个题的思路并不算太难,主要是®运算的转化

®运算可以转化成一张由字母的ASCII码与A的ASCII码的差值组成的表格

我们会发现,密钥的ASCII码和A的ASCII码的差值(简称ki好了)(同理明文的叫mi,密文的叫ci),这个东西,它符合一个规律:ci=ki+mi,所以想得到mi,只需ci-ki,而明文就是ci-ki+A的ASCII码,也就是密文的ASCII码-密钥的ASCII码+A的ASCII码(大家都能化简的,相信我~~看我真诚的大眼睛~~)

后面的你们都能看懂了
```cpp
#include<bits/stdc++.h> 
using namespace std;  
void turn(char &x);  
int main()  
{  
    char k[1000],C[1000];//定义密钥k和密文C  
    int len1,len2;  
    int i,j;  
    gets(k);//读入密钥
    gets(C);//读入密文  
    len1=strlen(k);  
    len2=strlen(C);   
    for(i=0;i<len1;i++)  
        turn(k[i]);//将密钥转化为大写,方便运算  
    for(i=0,j=0;i<len2;i++)  
    {  
        if(C[i]<='Z')//判断原字母大小写  
      &nbs

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值