zoukankan      html  css  js  c++  java
  • 加密2-华东师范-2020

    加密2

    Time Limit:1000MS Memory Limit:30000KB
    Total Submit:145 Accepted:83

    Description

    对一个整数(32位无符号整数)进行规则如下的加密:
    1. 低16位和高16位互换
    2. 此时的低16位按位取反
    3. 此时的高16位与低16位进行异或运算,结果存储到高16位

    现在根据加密后的整数,求出加密前的整数的16进制形式.

    Input

    输入有多case,每个case一行,且只有一个整数

    Output

    对于每个case输出一个整数(16进制形式),即加密前的整数。

    Sample Input

    4294901759

    Sample Output

    1


    hint:十六进制输出时请使用大写字母(A,B...)

    解题思路:

    1、  必须知道按位异或的特点:异或运算的特点如果 a^b=c,那么就有 c^b = a以及c^a=b此规律可以用来进行最简单的加密和解密.

    2、  倒着求解即可。

    程序代码:

    #include<stdio.h>

    int main()

    {

        unsigned int n,a,b,i,j,k;

        while(scanf("%d",&n)!=EOF)

        {

          a=n>>16;       //交换后的异或高16位

          b=n<<16;                              // 需要注意的是    每次参与运算的只有16位,所以取完数,在移回来。

          b=b>>16;        //交换后的低16位

          k=a^b;          // 交换后的高16位

          b=~b;        // 交换后,按位取反前的 低16位

          b=b<<16;           // 低 16 位变成高16位

          n=b+k;              // 相加即可

          printf("%X ",n);

        }

        return 0;               

    }

  • 相关阅读:
    代码收藏
    sql语句收藏
    网站收藏
    Api代码收集
    [网络收集]html 一个属性,多个数据
    [转] C#自定义的字符串操作增强类
    WebBrowser记录
    [转载]用C#的GDI+技术生成复杂型彩色验证码
    js addEventListener attachEvent用法
    正则表达式 获取常见所有标点符号
  • 原文地址:https://www.cnblogs.com/zhouhongweihpu/p/3230073.html
Copyright © 2011-2022 走看看