面试题47-不用加减乘除做加法
2018-04-04 10:58
253 查看
题目描述
写一个函数,求两个整数之和,要求在函数体内不准用+、-、×、÷四则运算符号。
思路
将十进制加法分为三步:
1、各位相加,不进位。
2、计算进位。
3、将前两个结果加起来。
将十进制加法转为二进制加法,结果也是三步走。
1、各位相加,不进位。发现0加0、1加1的结果都是0,0加1、1加0的结果为1。这和异或一致,因此用异或代替。
2、计算进位。只有1加1会出现进位,因此可以将这一步想象成先做与运算,再左移一位。
3、将前两个结果加起来。重复前两步,直到不产生进位为止。
代码:
语言:Java
写一个函数,求两个整数之和,要求在函数体内不准用+、-、×、÷四则运算符号。
思路
将十进制加法分为三步:
1、各位相加,不进位。
2、计算进位。
3、将前两个结果加起来。
将十进制加法转为二进制加法,结果也是三步走。
1、各位相加,不进位。发现0加0、1加1的结果都是0,0加1、1加0的结果为1。这和异或一致,因此用异或代替。
2、计算进位。只有1加1会出现进位,因此可以将这一步想象成先做与运算,再左移一位。
3、将前两个结果加起来。重复前两步,直到不产生进位为止。
代码:
语言:Java
public class Test47 { public static void main(String[] args) { int sum = Add(99,88); System.out.println(sum); } public static int Add(int num1,int num2) { int sum ,carry;//和,进位 do{ sum = num1 ^ num2;//第一步:只加不进位(异或) carry = (num1 & num2) << 1;//第二步:计算进位(与运算,再左移) num1 = sum; num2 = carry;//重复,将和与进位相加 } while(num2 != 0); return num1; } }
相关文章推荐
- 【剑指offer 面试题47】不用加减乘除做加法
- 面试题47-不用加减乘除做加法
- 面试题47:不用加减乘除做加法
- 剑指offer--面试题47:不用加减乘除做加法
- 剑指Offer面试题47不用加减乘除做加法(位运算),面试题48不能被继承的类(final)
- 面试题47:不用加减乘除做加法
- 【剑指Offer】面试题47:不用加减乘除做加法
- 剑指Offer面试题47:不用加减乘除做加法 Java实现
- (剑指Offer)面试题47:不用加减乘除做加法
- 【剑指Offer学习】【面试题47:不用加减乘除做加法】
- 面试题47:不用加减乘除做加法
- 剑指offer 面试题47 不用加减乘除做加法
- 面试题47—不用加减乘除做加法
- 面试题47:不用加减乘除做加法
- 剑指offer——面试题:47不用加减乘除做加法
- 【面试题47】不用加减乘除做加法
- 剑指offer——面试题47:不用加减乘除做加法
- 面试题47:不用加减乘除做加法
- 【剑指Offer学习】【面试题47:不用加减乘除做加法】
- 面试题47:不用加减乘除做加法