
ACM_二进制计算
feng_zhiyu
这个作者很懒,什么都没留下…
展开
-
【AtCoder Regular Contest 092】D - Two Sequences(按位统计,归并)
原题链接 题意:给两个长度为n的序列Ai,Bi,求所有数(Ai + Bj)的异或和,i,j∈[0,n)。 被某大佬告知这是原题【hdu5270】,就去学习了下。 原始题解没找到,然后贴了份题解。 题解: 我们考虑两个数A,B。 为了描述方便,我们设[P]的值为:当表达式P的值为真时,[P]=1,否则[P]=0 我们现在考虑计算[(A+B)and(2i)>0] 首先我们将A,...原创 2018-03-18 11:02:39 · 504 阅读 · 0 评论 -
【剑指Offer】二进制中1的个数(位运算)
题目链接 题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路: 【1】二进制数1的个数,容易想到BIT中lowbit。 n&(-n)表示一个数的最右边的1代表的数 【2】无符号右移运算符>>>,右移位时高位补0(无论原来的数是正是负)。java中可以直接使用,C++可以先转化unsigned int,再使用>>。ps:此...原创 2018-08-27 00:17:00 · 294 阅读 · 0 评论 -
【剑指Offer】求1+2+3+...+n(逻辑运算和位运算)
题目链接 题目描述 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 思路:虽然是简单的求和公式n*(n+1)/2,但是必须满足以上的条件。 【1】递归,不能使用if等条件判断语句,可以使用&&逻辑运算符的短路特性实现。 【2】利用sizeof(a)计算bool数组的字节数,bo...原创 2018-08-28 12:01:56 · 938 阅读 · 0 评论 -
【剑指Offer】不用加减乘除做加法(位运算)
题目链接 题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 思路:位运算符 两个数异或(^):相当于每一位相加,而不考虑进位; 两个数相与(&),并左移一位:相当于求得进位; 将上述两步的结果相加 代码【非递归】: class Solution { public: int Add(int num1, int num2) ...原创 2018-08-28 12:02:04 · 314 阅读 · 0 评论