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

剑指offer (47) 不用加减乘除做加法

时间:2014-07-10 10:55:09      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   div   amp   

题目:求两个整数之和,要求不得使用 加减乘除四则运算

 

题解分析:加减乘除都不能用,还要进行各种运算,必然想到 位运算

 

十进制加法: 5 + 17 = 22

step1. 各位相加,不考虑进位,即舍弃进位,结果为 12 (5 + 7 = 12舍弃进位)

step2. 做进位 (5 + 7 = 12 > 9 有进位) 进位为10

step3. 两步结果相加 12 + 10 = 22

 

二进制加法:5 + 17 = 22 即 101 + 10001 

step1. 各位相加,不考虑进位,即舍弃进位,结果为 10100

step2. 做进位 (1 + 1 有进位) 进位为 二进制的10

step3. 10100 + 10 = 10110 = 22

 

对于二进制:

各位相加不考虑进位:0 + 0 = 0 ;1 + 1 = 0;1 + 0 = 1; 0 + 1 = 1 异或操作搞定

做进位:只有1+1才有进位,即 1&1 与操作搞定

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;
}

 

剑指offer (47) 不用加减乘除做加法,布布扣,bubuko.com

剑指offer (47) 不用加减乘除做加法

标签:style   blog   color   使用   div   amp   

原文地址:http://www.cnblogs.com/wwwjieo0/p/3812166.html

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