# 非常规A + B Problem
## 第一种:递归
```c++
#include<iostream>
using namespace std;
int a,b;
int f(int x){
if(x<=1)
return x;
return f(x/2)+f(x-x/2);
}
int main(){
cin>>a>>b;
cout<<f(a)+f(b);
return 0;
}
```
## 第二种:递推
```c++
#include<iostream>
using namespace std;
int a,b,s;
void f(int x){
for(int i=1;i<=x;i++)
s++;
}
int main(){
cin>>a>>b;
f(a);
f(b);
cout<<s;
return 0;
}
```
## 第三种:二进制
```c++
#include<iostream>
using namespace std;
int a,b;
int er(int x){
int f=1,cnt=0,s=0;
if(x<0){
f=-1;
x=-x;
}
while(x){
if(x%2)
s+=1<<(x%2*cnt);
x/=2;
cnt++;
}
return s*f;
}
int main(){
cin>>a>>b;
cout<<er(a)+er(b);
return 0;
}
```
## 第四种:位运算
非递归版本1
```c++
#include<iostream>
using namespace std;
int a,b,c=1;
int main(){
cin>>a>>b;
while(b>=c){
a+=b&c;
c<<=1;
}
cout<<a;
return 0;
}
```
非递归版本2
```c++
#include<iostream>
using namespace std;
int a,b;
int main(){
cin>>a>>b;
cout<<(a|b)+(a&b);
}
```
递归版本
```c++
#include<iostream>
using namespace std;
int a,b;
int f(int x,int y){
if(!y)
return x;
return f(x^y,(x&y)<<1);
}
int main(){
cin>>a>>b;
cout<<f(a,b);
return 0;
}
```