AOI6 2021-09-22 23:48 采纳率: 92.3%
浏览 84
已结题

凯撒密码一道关于C语言的题

TU是一个非常不喜欢冒险非常讨厌挑战的人,有一天他接到一个来自上级Home_W的任务,要求是让他把一串字符串解密,解密方法是每个位置上的字符向左位移2^(i%30)次(i表示在字符串中的下标i(i从0开始)),且A向左移是B, Z向左移是a, z向左移是A,这个字符串的解密很有意思,然而TU嫌写代码麻烦就把问题甩给了你们,你们能很快帮他写出解密程序吗?

Input
输入多组数据 请处理到文件结束

每一行输入一个加密字符串str, str的长度小于1000000, 保证没有空格等多余字符出现在字符串内。

Output
输出解密以后的字符串,每个字符串占一行

SampleInput
vc
Zpa
ehqlKwaGv
SampleOutput
we
are
fjutacmer

  • 写回答

1条回答 默认 最新

  • Admini$trat0r .net领域新星创作者 2021-09-23 08:48
    关注
    
    #include <iostream>
    #include <cstring>
    #include <cmath>
    using namespace std;
    
    const int sa = 97, sA = 65, sz = 122, sZ = 90;
        
    int azAz(int n)
    {
        while (n > sZ && n < sa || n > sz)
        {
            if (n > sz)
            {
                n -= sz - sA - 1;
            }    
            else
            {
                n += sa - sZ - 1;
            }
        }
        return n;
    }
    
    int main()
    {
        int N = 30;
        int a[N];
        int num = 52, n;
    
        for (int i = 0; i < N; i++)
        {
            int temp = pow(2, i);
            if (temp < num)
            {
                a[i] = temp;
            }
            else
            {
                n = i;
                break;
            }
        }
        for (int i = n; i < N; i++)
        {
            int temp = a[i - 1] * 2;
            a[i] = temp % num;
        }
        
        string str;
        while(cin>>str)
        {
            int slen = str.length();
            for (int i = 0; i < slen; i++)
            {
                int temp = (int)str[i];
                temp += a[i % N];
                temp = azAz(temp);
                str[i] = (char)temp;
            }
            cout<<str<<endl;
        }
        
        return 0;
    }
    

    哪里的题 我去提一下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月2日
  • 已采纳回答 9月24日
  • 创建了问题 9月22日

悬赏问题

  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)