关闭

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

标签: 面试题
255人阅读 评论(0) 收藏 举报
分类:
#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;
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:524801次
    • 积分:4603
    • 等级:
    • 排名:第6366名
    • 原创:95篇
    • 转载:115篇
    • 译文:0篇
    • 评论:27条
    最新评论