剑指offer:不用加减乘除做加法
来源:互联网 发布:mac输入法切换 编辑:程序博客网 时间:2024/06/07 08:18
- 问题描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
class Solution {public: int Add(int num1, int num2) { }};
- 分析
由于不能用四则运算,所以不可避免的,我们还是要用位运算,我们都知道在二进制中:0+0=0,0+1=1,1+0=1,1+1=0,由此可以看出位与位之间的运算结果和异或的结果是一样的,然后考虑进位,对于0+0,0+1,1+0都不会产生进位只有1+1时才产生进位,这与与运算的结果相同。所以对于两个数num1、num2,我们可以先获得二者异或运算的值,然后获取与运算的值(获取各位是否进位的情况),并将其左移一位,然后将获得的值与异或得到的结果继续进行异或(将各进位的值加到未进位的结果上)和与运算并左移的操作,直到与运算并左移的结果为0。例如对于二进制数0111和0101:
首先进行异或运算得到0010,与运算得0101,左移得0010;
异或(0010^1010)得1000,与运算得0010,左移得0100;
异或(1000^0100)得1100,与运算得0000,左移得0000(停止)。
所以最后结果为1100。 - 代码
class Solution {public: 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; }};
阅读全文
0 0
- 【剑指offer】不用加减乘除做加法
- 【剑指offer】不用加减乘除做加法
- 剑指Offer之 - 不用加减乘除做加法
- 剑指offer: 不用加减乘除做加法
- 剑指offer 不用加减乘除做加法
- 《剑指offer》不用加减乘除做加法
- 剑指offer--不用加减乘除做加法
- 剑指offer:不用加减乘除做加法
- 【剑指offer】之不用加减乘除做加法
- 剑指offer-不用加减乘除做加法
- 《剑指offer》不用加减乘除做加法
- 剑指offer:不用加减乘除做加法
- 剑指Offer--047-不用加减乘除做加法
- 剑指offer题解 不用加减乘除做加法
- 《剑指offer》:[47]不用加减乘除做加法
- 《剑指offer》-不用加减乘除做加法
- 剑指offer 不用加减乘除做加法
- 【剑指offer】不用加减乘除做加法
- 对Java中修饰符的学习
- 第一章作业
- Spring Boot Application 运行
- CentOS网络配置及XShell远程连接
- 欢迎使用CSDN-markdown编辑器
- 剑指offer:不用加减乘除做加法
- LQB-5
- 从Vue.js源码看异步更新DOM策略及nextTick
- oracle linux7 安装 nagios
- Java NIO系列教程(5):通道之间的数据传输
- 单点登录CAS技术概述
- java认知以及jdk安装
- JS(JQ)实现table表格固定表头且表头可以随横向滚动而滚动
- 试题1-3