• 加密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;               

    }

  • 相关阅读:
    POJ Countries in War 3114
    POJ 2553 The Bottom of a Graph
    POJ 2762 Going from u to v or from v to u?(强联通 + TopSort)
    POJ 3180 The Cow Prom(强联通)
    HDU 4738 Caocao's Bridges
    喵哈哈村的几何大师╰☆莣メ誋こ月
    Vladik and Entertaining Flags
    XOR Queries
    Palindrome
    F
  • 原文地址:https://www.cnblogs.com/zhouhongweihpu/p/3230073.html
Copyright © 2020-2023  润新知