chenpingjun1990

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  0 随笔 :: 22 文章 :: 5 评论 :: 0 Trackbacks

题目:实现int add(int a, int b)方法,实现a和b的和,但是内部不允许使用+-*/等算术运算
分析:不能使用+-*/等算术运算,那么能马上想到的肯定就是>> << & |等位运算符,加法实际上可分成两个部分:
无进位加法以及进位。而无进位加法可以用^(异或)实现,进位可以用&(与)以及<<实现。这样我们可以一下公式:
                                       a+b = (a^b) + (a&b)<<1
看这个等式,这个过程中还是有加法,怎么解决?递归即可,而结束条件则为其中某一项等于零时。
但是应该判断哪一项为零时递归结束,看一下说明:
在a = 0, b = 7时,a=a^b =7, b=(a&b)<<1= 0;
而a = 7, b = 0时,a=a^b =7, b=(a&b)<<1= 0;
由上例可以看出(a&b)<<1更容易趋近于0,而a^b可能永远不会趋近于0.

     由以上,可以写出以下代码:

1int add(int a, int b)
2{
3  if (0==b) 
4    return a;
5  else
6    return add(a^b,(a&b)<<1);
7}




 

posted on 2011-12-27 18:36 万川先生 阅读(586) 评论(0)  编辑 收藏 引用 所属分类: Cplusplus