位运算
2025-08-30 15:41:30
发布于:上海
5阅读
0回复
0点赞
首先这是一道加法问题,不会无缘无故单独出出来的,所以这道题极有可能在考察加法的原理。
众所周知C++是基于二进制位运算实现的,因此我们需要用位运算解出这道题。
首先我们了解二进制加法:
二进制只有0或1,对于每一位,0+0=0,0+1=1,1+0=1,1+1=0(进位)
不难发现,a^b(异或)就是不含进位的加法值,(a&b)<<1就是进位值,因此add函数就写出来了:
int add(int a,int b){
return add((a&b)<<1,a^b);
}
不过这样显然是没有边界的递归,会RE,不过加法的进位是不会无限执行的,所以只要没有进位即可返回。
我们再分析一下复杂度:int型二进制最多会有log2(v)位,最多循环log2(v)次,因此复杂度为O(log2(v)),T不了
所以上代码:
#include <bits/stdc++.h>
using namespace std;
int add(int a,int b){
if(!a) return b;
return add((a&b)<<1,a^b);
}
int main(){
int a,b;
cin>>a>>b;
cout<<add(a,b);
return 0;
}
全部评论 3
3
2025-08-30 来自 上海
02
2025-08-30 来自 上海
01
2025-08-30 来自 上海
0
有帮助,赞一个