题目:
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号
思路:
* 三步走
* 1、整数转变为二进制后,相加为0,0->0 0,1->1 1,1->0. 先不考虑进位,为异或操作结果
* 2、考虑进位,只有1,1时需要进位,则两数字相与,只有1,1为1,这样就找到了需要进位的,然后该数左移一位
* 3、前面两部的结果相加,相加的过程仍然是重复以上两个步骤,直到不产生新的进位为止
代码:
package com.datastructure.other;
/**
* 不用加减乘除运算符做加法
*
* 题目:
* 求两个整数的和,不用加减乘除符号
*
* 思路:
* 三步走
* 1、整数转变为二进制后,相加为0,0->0 0,1->1 1,1->0. 先不考虑进位,为异或操作结果
* 2、考虑进位,只有1,1时需要进位,则两数字相与,只有1,1为1,这样就找到了需要进位的,然后该数左移一位
* 3、前面两部的结果相加,相加的过程仍然是重复以上两个步骤,直到不产生新的进位为止
*/
public class SumWithoutPlus {
public static int plus(int num1, int num2) {
int sum = 0;
int c = 0;
do {
// 第一步
sum = num1 ^ num2;
// 第二步,并左移结果
c = (num1 & num2) << 1;
// 第三步,相加sum c
num1 = sum;
num2 = c;
} while(c != 0);
return sum;
}
public static void main(String[] args) {
System.out.println("27+35: " + plus(27,35));
}
}