A+B 问题

问题:
给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。
代码:

//
//  main.cpp
//  A+B
//
//  Created by apple on 2018/8/3.
//  Copyright © 2018年 apple. All rights reserved.
//

#include 
using namespace std;
long long ans(long long a,long long b)
{
    long long x1,x2;
    if(a==0)return b;
    if(b==0)return a;
    x1=a^b;
    x2=(a&b)<<1;
    return ans(x1,x2);
}
int main() {
    long long A,B;
    cin>>A>>B;
    cout<

例子:

二进制(位) 1 2 3 4 5 6 7 8
a=30 0 0 0 1 1 1 1 0
b=45 0 0 1 0 1 1 0 1
c=a+b=75 0 1 0 0 1 0 1 1
递归1(位) 1 2 3 4 5 6 7 8
x11 x 11 = a^b 0 0 1 1 0 0 1 1
a&b 0 0 0 0 1 1 0 0
x21 x 21 = (a&b)<<1 0 0 0 1 1 0 0 0
递归2(位) 1 2 3 4 5 6 7 8
x12 x 12 = x11 x 11 ^ x21 x 21 0 0 1 0 1 0 1 1
x11 x 11 & x21 x 21 0 0 0 1 0 0 0 0
x22 x 22 = ( x11 x 11 & x21 x 21 )<<1 0 0 1 0 0 0 0 0
递归3(位) 1 2 3 4 5 6 7 8
x13 x 13 = x12 x 12 ^ x22 x 22 0 0 0 0 1 0 1 1
x12 x 12 & x22 x 22 0 0 1 0 0 0 0 0
x23 x 23 = ( x12 x 12 & x22 x 22 )<<1 0 1 0 0 0 0 0 0
递归4(位) 1 2 3 4 5 6 7 8
x14 x 14 = x13 x 13 ^ x23 x 23 0 1 0 0 1 0 1 1
x13 x 13 & x23 x 23 0 0 0 0 0 0 0 0
x24 x 24 = ( x13 x 13 & x23 x 23 )<<1 0 0 0 0 0 0 0 0

你可能感兴趣的:(C++题库4-其他)