首页 > 试题广场 >

另类加法

[编程题]另类加法
  • 热度指数:8051 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给定两个int AB。编写一个函数返回A+B的值,但不得使用+或其他算数运算符。

测试样例:
1,2
返回:3
import java.util.*;

public class UnusualAdd {
    public int addAB(int A, int B) {
        if (B == 0) {
            return A;
        }
        int sum = 0;
        int carry = 0;
        while (B != 0) {
            sum = A ^ B;
            carry = (A & B) << 1;
            A = sum;
            B = carry;
        }
        return sum;
    }
}
发表于 2023-08-10 16:49:39 回复(0)
import java.util.*;

public class UnusualAdd {
    public int addAB(int A, int B) {
        // write code here
        int sum = 0;
        int carry = 0;
        while(B != 0){
            sum = A ^ B;
            carry = (A & B) << 1;
            A = sum;
            B = carry;
        }
        return sum;
    }
}

发表于 2022-04-08 10:18:43 回复(0)
import java.util.*;

public class UnusualAdd {
    public int addAB(int A, int B) {
        if(B == 0) {
            return A;
        }
        int sum = 0;
        int carry = 0;
        while(B != 0) {
             sum = A ^ B;
             carry = (A & B) << 1;
             A = sum;
             B = carry;
        }
        return A;
    }
}
发表于 2022-04-05 11:29:01 回复(0)

import java.util.*;

public class UnusualAdd {
    public int addAB(int A, int B) {
        int sum = 0;
        int carry = 0;
        while(B!= 0){
             sum  = A ^ B;
            carry = (A & B) << 1;
             A = sum;
             B = carry;
        }
       
        return A;
    }
}

编辑于 2022-04-01 14:59:05 回复(0)
import java.util.concurrent.atomic.AtomicInteger;

public class UnusualAdd {
    public int addAB(int A, int B) {
        AtomicInteger num = new AtomicInteger(A);
        num.getAndAdd(B);
        return num.get();
    }
}

发表于 2022-03-30 14:49:14 回复(0)
虽然怎么都理解不了位运算,但我还是听话地按照你们说的写了
import java.util.*;

public class UnusualAdd {
    public int addAB(int A, int B) {
        // write code here
        int a = A;
        int b = B;
        while (B != 0) {
            a = A ^ B;
            b = (A & B) << 1;
            A = a;
            B = b;
        }
        return A;
    }
}

发表于 2021-12-11 21:55:46 回复(0)
  代码实现,已通过。
  思路:利用位运算,
  对于异或:0^0=0,1^0=1,1^1=0,可以实现数字无进位相加。
  再用与运算0&0=0,1&0=0,1&1=1,将与运算的结果左移1位即可变为进位位。
  一直加到进位位为0结束计算。
  代码如下:
import java.util.*;

public class UnusualAdd {
    public int addAB(int A, int B) {
        int carry=(A&B)<<1;
        A=A^B;
        B=carry;
        while (B!=0)
        {carry=(A&B)<<1;
           A=A^B;
           B=carry;
        }
return A;
    }
}


发表于 2020-02-12 09:28:51 回复(0)
import java.util.*;

public class UnusualAdd {
    public int addAB(int A, int B) {
        // write code here
    	if (A == 0) {
    		return B;
    	}
    	
    	if (B == 0) {
    		return A;
    	}
    	
    	int sum = 0;
    	int carry = 0;
    	
    	while (B != 0) {
        	sum = A ^ B;
        	carry = (A & B) << 1;
        	A = sum;
        	B = carry;
    	}
    	
    	return A;
    }
}

发表于 2019-12-14 19:14:08 回复(0)
我觉得这是最简单的了,虽然我也没懂原理
public int addAB(int A, int B) {
        int c=(A|B)+(A&B);
        return c;
    }


发表于 2019-11-22 19:44:31 回复(1)
二进制加法。发现一个特点。
位的异或运算跟求'和'的结果一致:
异或 1^1=0 1^0=1 0^0=0     
求和 1+1=0 1+0=1 0+0=0
位的与运算跟求'进位‘的结果一致:
位与 1&1=1 1&0=0 0&0=0
进位 1+1=1 1+0=0 0+0=0
于是可以用异或运算和与运算来表示加法
    public int addAB(int A, int B) {
        int xor,and;
        while(B!=0){
            xor = A^B;
            and = (A&B)<<1;
            A=xor;
            B=and;
        }
        return A;
    }

发表于 2017-03-28 18:48:29 回复(6)
public int addAB(int A, int B) { 
        int tem=0;//代表进位位
	do{
		tem=A&B;
		A=A^B;
		B=tem<<1;
	}
	while(B!=0);
	return A;
 }

编辑于 2016-08-12 16:12:02 回复(5)