面试题47:不用加减乘除做加法

学习了一段时间《剑指offer》现在做了一些笔试,现在陆续把笔记上传到博客,方便自己及他人上网查看。

 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+,-,×,÷四则运算符号。

    思路:分三步;

    第一步:相加不考虑进位情况,用异或来处理

    第二步:考虑进位信息,用与操作,左移一位处理

    第三步:将第一步和第二部的结果相加(其实就是重复第一步,第二步),直到进位为0。

    代码如下:

int Add(int num1, int num2)
{
	int sum, carry;
	do
	{
		sum = num1^num2;
		carry = (num1&num2) << 1;
		num1 = sum;
		num2 = carry;
	} while (num2 != 0);
	return num1;
}

相关问题:不使用新的变量,交换两个变量的值。

    假设有两个变量a,b。有两种不同的方法实现:

第一种方法:基于加减法

    A=A+B;

    B=A-B;           (交换)

    A=A-B;           (交换)

第二种方法:基于异或运算

    A=A^B;

    B=A^B;           (交换)

    A=A^B;           (交换)

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值