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

凯撒密码一道关于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 00: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;
    }
    

    哪里的题 我去提一下

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    AOI6 2021-09-23 11:01

    能不能用C语言解答 C++还没学

    回复
    Admini$trat0r 回复 AOI6 2021-09-23 23:14

    没啥区别 你都能看懂 就是参考 自己敲一遍才能学习

    回复
    AOI6 回复 Admini$trat0r 2021-09-24 08:56

    嗯 谢谢

    回复
    展开全部5条评论
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 10月1日
  • 已采纳回答 9月24日
  • 创建了问题 9月22日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部