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

剑指Offer——不用加减乘除做加法

时间:2017-11-03 00:18:30      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:int   logs   函数   整数   相加   color   span   pre   步骤   

题目描述:

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


分析:

 "^"是不带进位的加法。

 "&"可以得到所有进位位组成的数。

我们只需要将不进位加后的数与所有进位位组成的数右移一位的结果相加就可以得到和。

不过我们在上面一步的加法过程中,我们也只能用"^"不进位的加法。

所以我们要循环之前的步骤直到不出现进位的情况,这样我们的"^"就和普通加法一样了。


代码:

 1 class Solution {
 2 public:
 3     int Add(int num1, int num2) {
 4         int a = num1 ^ num2;    // 不进位加
 5         int b = (num1 & num2) << 1; // 要进位位组成的数右移一位
 6         while(b) {  // 不进位加后的数与要进位位组成的数右移一位的结果相加
 7             int c = a ^ b;
 8             b = (a & b) << 1;
 9             a = c;
10         }
11         return a;
12     }
13 };

 

剑指Offer——不用加减乘除做加法

标签:int   logs   函数   整数   相加   color   span   pre   步骤   

原文地址:http://www.cnblogs.com/jacen789/p/7747756.html

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