我的新博客

心得及感受

面试题47:不用加减乘除做加法
#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;
}
阅读更多
文章标签: 面试题
个人分类: mycode
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭