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

A+B问题

时间:2018-05-29 00:19:38      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:操作   加法   整数   turn   a+b   usb   return   stat   相加   

A+B问题

描述

给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。

思路:

1、 采用二进制进行加法操作
2、 a ^ b ; 相异为1-->二进制不进位的结果;即0+1=1,1+0=1,0+0=0
3、 (a & b ) << 1 ; (a & b)二进制相同位都是1则该位为1,即1+1 = 10,需要进位则右移一位-->二进制进位的结果
4、 递归调用(2步 + 3步)

好了,我们跟着思路实现一下

递归实现
public static int aplusb(int a , int b) {
        if(a == 0 ) {
            return b;
        }
        if(b == 0 ) {
            return a;
        }
        
        int i , j;
        i = a^b;//不进位得到的结果
        j = (a&b)<<1;//进位得到的结果
        
        //继续相加
        return aplusb(i , j);
    }
迭代实现
public static int aplusb2(int a , int b) {
        int temp;
        while(a != 0 && b != 0 ) {
            temp = a ^ b;
            b = (a & b) << 1;
            a = temp;
        }
        
        return a == 0 ? b : a;
    }

A+B问题

标签:操作   加法   整数   turn   a+b   usb   return   stat   相加   

原文地址:https://www.cnblogs.com/qjmnong/p/9102785.html

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