C语言求 不用加减乘除做加法
解题思路
对于两个数a b,直接使用异或运算,得到不进位的数据,比如二进制 0101 与二进制 1011 ,直接异或运算,相当于按照位进行加法。 此时在计算一个发生进位的值,使用与运算,两个1会发生进位,得到进位结果需要左移一次,因为进位向前进一。 因此 a+b 等价于 (a^b) + ((a&b)<<1),又是 A+B的形式,接着计算,直到一方为0。
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @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;
}