码迷,mamicode.com
首页 > 其他好文 > 详细

《剑指offer》不用加减乘除做加法

时间:2015-09-13 12:00:20      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:剑指offer   牛客网   

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:libin493073668@sina.com】


题目链接:http://www.nowcoder.com/practice/59ac416b4b944300b617d4f7f111b215?rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking


题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

思路
题目要求不用四则运算,那么我们能够想到的也就只有位运算了,那么我们怎么使用位运算来计算加法呢?
首先我们看,两数相加不进位的情况,这其实就是两个数异或的值。
而我们接下来就得计算进位了,我们知道二进制中只有同为1的时候才需要进位,而同为1的话,我们只有通过&运算来取得。
得到了上述的结论之后,我们就可以知道,整个加法的过程就是两个数的异或和相与并左移的一个过程了。


class Solution
{
	public:
		int Add(int num1, int num2)
		{
			int sum,carry;
			do
			{
				sum = num1^num2;
				carry = (num1&num2)<<1;
				
				num1 = sum;
				num2 = carry;
			}while(num2);
			return num1;
		}
};


版权声明:本文为博主原创文章,如果转载,请注明出处

《剑指offer》不用加减乘除做加法

标签:剑指offer   牛客网   

原文地址:http://blog.csdn.net/libin1105/article/details/48413695

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!