剑指offer面试题47不用加剑乘除做加法,考虑加法的过程用位运算

/*
这个就是用位运算模拟加法的过程 我们这么想 两个数相加
先把对应位的数加起来 不考虑进位 加完后 再把进位都加上
如果还产生进位的话 上一步加得的结果  再加进位 直到没有进位
*/
#include<iostream>
#include<cstdio>
using namespace std;

int Sum(int a, int b)
{
    int sum,tmp;
    do{
        sum=a^b;//第一步 先加 不产生进位的
        tmp=(a&b)<<1;//第二步 是这一次进位后得到的结果
        a=sum;//a变成和 b变成进位如果b不是0 那他俩还继续加 直到没有进位了
        b=tmp;
    }while(tmp!=0);//很少写do while 注意这里有分号
    return sum;
}

int main()
{
    int a,b;
    while(cin>>a>>b)
    {
        cout<<Sum(a,b)<<endl;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值