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

48、剑指offer--不用加减乘除做加法

时间:2017-06-24 13:19:17      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:blog   不用加减乘除做加法   turn   logs   code   结束   解题思路   solution   二进制   

题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
 
解题思路:例如5+17转化成二进制即为101+10001
1)不考虑进位101 + 10001 = 10100
2)进位1+1 = 10
3)相加10100+10 = 10110 =22
所以分别算不考虑进位和进位的相加即可,其中不考虑进位相当于异或操作0^0 = 0 0^1 = 1 1^0 = 1 1^1 =0,进位操作相当于先求&再左移1 1&1 = 1 1<<1 = 10
 1 class Solution {
 2 public:
 3     int Add(int num1, int num2)
 4     {
 5         int sum = 0;//不考虑进位和
 6         int carry = 0;//进位结果
 7         while(num2 != 0)//直到不产生进位结束循环
 8         {
 9             sum = num1^num2;
10             carry = (num1&num2)<<1;
11             num1 = sum;
12             num2 = carry;
13         }
14         return num1;
15     }
16 };

 

48、剑指offer--不用加减乘除做加法

标签:blog   不用加减乘除做加法   turn   logs   code   结束   解题思路   solution   二进制   

原文地址:http://www.cnblogs.com/qqky/p/7072984.html

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