C语言求 不用加减乘除做加法

解题思路

对于两个数a b,直接使用异或运算,得到不进位的数据,比如二进制 0101 与二进制 1011 ,直接异或运算,相当于按照位进行加法。 此时在计算一个发生进位的值,使用与运算,两个1会发生进位,得到进位结果需要左移一次,因为进位向前进一。 因此 a+b 等价于 (a^b) + ((a&b)<<1),又是 A+B的形式,接着计算,直到一方为0。

alt

 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param num1 int整型 
 * @param num2 int整型 
 * @return int整型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int Add(int num1, int num2 ) {
    //a+b= (a^b)  +  (a&b)<<1
    while(num2!=0){
        int temp=num1;
        num1=num1^num2;
        num2=((temp&num2)<<1);
    }
    return num1;
}