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

原创 2016年05月30日 19:58:22
#include <iostream>
using namespace std;


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

/*
a = 5;  // 101
b = 17;  // 10001
按如下步骤计算a+b:

1) 不考虑进位相加: 101 + 10001 = 10100
2) 记录进位: ( 101 & 10001 ) << 1 = 10
3) 将前两步结果相加: 10100 + 10 = 10110
4) 如果第三步还有进位,则重复2),3)步,直到进位为0,此时第三步的和就为a+b的结果;
 
*/

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

相关文章推荐

【剑指Offer学习】【面试题47:不用加减乘除做加法】

题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷四则运算符号。 分析:这又是一道考察发散思维的很有意思的题目。当我们习以为常的东西被限制使用的时候,如何突破常规去思考,就是解决...

剑指offer-面试题47-不用加减乘除做加法

package case47_AddTwoNumbers; /** * 题目:写一个函数,求两个整数之和,要去在函数体内不得使用+ - * / 四则运算符号。 * * 思路:如果是十进制的处...

剑指Offer面试题47:不用加减乘除做加法 Java实现

题目:不用加减乘除做加法           写一个函数,求两个整数之和,要求在函数体内不得使用+,-,x,÷四则运算符号。 算法分析: 面试的时候被问道这个问题,首先我们分析人们是如何进行十...

【剑指Offer】面试题47:不用加减乘除做加法

一:题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号 二:解体分析 对数字做运算,除了四则运算,也就只剩下位运算了 如5+17=22 5的二进制表示10...

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

分析: (1)十进制加法分三步:(以5+17=22为例) 1. 只做各位相加不进位,此时相加结果为12(个位数5和7想家不进位是2,十位数0和1相加结果是1); 2. 做进位,5+7中有进位,进位的值...

《剑指offer》:[47]不用加减乘除做加法

题目:写一个函数,求两个整数的和,要求在函数体内不得使用+-*/四则运算。 方案一:位运算。 第一步:将数据转换为二进制,只将各位进行相加,不计算进位。 第二步:做进位看进位的是多少; 第三步...
  • gogoky
  • gogoky
  • 2016年06月25日 11:42
  • 1328

《剑指Offer》面试题:不使用加减乘除做加法运算

题目描述: 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:分三步 1、先将各bit位相加sum,不计进位,这一步可以用m^n实现 2、计算进位,进位如何来...

剑指Offer--047-不用加减乘除做加法

链接 牛客OJ:不用加减乘除做加法 九度OJ:http://ac.jobdu.com/problem.php?pid=1507 GitHub代码: 047-不用加减乘除做加法 ...
  • gatieme
  • gatieme
  • 2016年05月24日 20:48
  • 1418

剑指offer:不用加减乘除做加法(java)

题目:写一个函数,求两个整数之和,要求在函数体内不得适用+,-,* ,./  四则运算符号     面试的时候被问道这个问题,首先我们分析人们是如何进行十进制的加法的,比如如何得出5+17=22这个...

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

T: 题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 不能用加减乘除做,只能求助于位运算啦。。首先来看四个基本操作:在整数的加法中,如果我们将两个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:面试题47:不用加减乘除做加法
举报原因:
原因补充:

(最多只允许输入30个字)