加密2-华东师范-2020
| 加密2 |
Time Limit:1000MS Memory Limit:30000KB
Total Submit:145 Accepted:83
Description
對(duì)一個(gè)整數(shù)(32位無(wú)符號(hào)整數(shù))進(jìn)行規(guī)則如下的加密:
1. 低16位和高16位互換
2. 此時(shí)的低16位按位取反
3. 此時(shí)的高16位與低16位進(jìn)行異或運(yùn)算,結(jié)果存儲(chǔ)到高16位
現(xiàn)在根據(jù)加密后的整數(shù),求出加密前的整數(shù)的16進(jìn)制形式.
Input
輸入有多case,每個(gè)case一行,且只有一個(gè)整數(shù)
Output
對(duì)于每個(gè)case輸出一個(gè)整數(shù)(16進(jìn)制形式),即加密前的整數(shù)。
Sample Input
4294901759
Sample Output
1
hint:十六進(jìn)制輸出時(shí)請(qǐng)使用大寫(xiě)字母(A,B...)
解題思路:
1、? 必須知道按位異或的特點(diǎn):異或運(yùn)算的特點(diǎn)如果 a^b=c,那么就有 c^b = a以及c^a=b此規(guī)律可以用來(lái)進(jìn)行最簡(jiǎn)單的加密和解密.
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;????????????????????????????? // 需要注意的是??? 每次參與運(yùn)算的只有16位,所以取完數(shù),在移回來(lái)。
????? b=b>>16;??????? //交換后的低16位
????? k=a^b;????????? // 交換后的高16位
????? b=~b;??????? // 交換后,按位取反前的 低16位
????? b=b<<16;?????????? // 低 16 位變成高16位
????? n=b+k;????????????? // 相加即可
????? printf("%X\n",n);
??? }
??? return 0;???????????????
}
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/zhouhongweihpu/p/3230073.html
總結(jié)
以上是生活随笔為你收集整理的加密2-华东师范-2020的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ecos代码分析(1)
- 下一篇: Tomcat源码分析(十)--部署器 转