【算法题】不使用加减乘除符号计算两数之和a+b
来源:互联网 发布:在jsp中写java代码 编辑:程序博客网 时间:2024/05/21 14:03
【算法题】不使用加减乘除符号计算两数之和a+b
参考博客1:http://blog.csdn.net/morewindows/article/details/8710737
参考博客2:http://blog.csdn.net/morewindows/article/details/7354571
有关题目:leetcode371
1、a+b
—–假设在十进制的情况下,5+7的进位是1,不进位和是2,最后的结果是1*10+2=12,所以在二进制的情况下,也可以这样做。
—–假设a=3,b=6,则a+b=3+6
a 0011 =3 b 0110 =6不进位和 0101 =5 进位 0010 =2
—–于是变成5+2*2,即5+2<<1,
a 0101 =5 b 0100 =2<<1不进位和 0001 =1 进位 0100 =4
—–接着又变成1+4*2,即1+4<<1,
a 0001 =1 b 1000 =1<<1不进位和 1001 =9 进位 0000 =0
—–至此,不再有进位,所以结果为9。
—–c++代码如下:
int getSum(int a, int b) { while (b != 0) { int temp = a^b;//得到不进位和 b = (a&b) << 1;//得到进位后左移一位 a = temp; } return a; }
—–Python代码如下,但是提交超时:
def getSum(a, b): while(b != 0): temp = a^b b = (a&b) << 1 a = temp return a
—–修改Python代码如下,
def getSum(a, b): mymax = 0x7FFFFFFF mymin = 0x80000000 mask = 0xFFFFFFFF while(b != 0): temp = (a^b) & mask b = ((a&b) << 1) & mask a = temp if a<= mymax: return a else: return ~(a ^ mask)
2、a+b*5
—–这种情况就是将其转化为加法,然后按照上述方法即可。比如a+ b * 5 = a + b * 4 + b = a + b << 2 + b。然后按照上述方法即可。
—–c++代码如下:
int getMul(int a, int b ,int n) { int tempb = b << (n / 2); while (b != 0) { int temp = a^b; b = (a&b) << 1; a = temp; } while (tempb != 0) { int temp = a^tempb; tempb = (a&tempb) << 1; a = temp; } return a; }
0 0
- 【算法题】不使用加减乘除符号计算两数之和a+b
- 【计算两数之和】不使用加减乘除
- 不用加减乘除运算符计算两数之和及a=b*3
- 不用加减乘除运算符计算两数之和及a=b*3
- 两个常见位操作面试题 不用加减乘除运算符计算两数之和及a=b*3
- 两个常见位操作面试题 不用加减乘除运算符计算两数之和及a=b*3
- 两个常见位操作面试题 不用加减乘除运算符计算两数之和及a=b*3
- 两个常见位操作面试题:不用加减乘除运算符计算两数之和及a=b*3
- 两个常见位操作面试题 不用加减乘除运算符计算两数之和及a=b*3
- 两数之和a+b
- 不使用四则运算符计算两数之和
- 不使用“+”“-”操作符计算两数之和
- 不使用加减乘除符号计算加法
- 不用加减乘除运算符计算两数之和
- 剑指Offer——不用加减乘除求两个整数之和 + 不使用新的变量交换变量a,b
- 371. Sum of Two Integers, 不用加减乘除运算符计算两数之和
- 给你两个数 a 和 b , 请你计算 a b 之间所有数的数字之和
- 算法练习:两数之和
- Axure使用——创建折叠菜单
- HTML5 拖放Drag 和 drop用法以及事件介绍
- First Unique Character in a String
- eclipse,工程/文件目录,相对路径(真心的详细~)
- BZOJ 1449: [JSOI2009]球队收益 拆边费用流
- 【算法题】不使用加减乘除符号计算两数之和a+b
- SharedPreference的使用 第一次进入APP时,进入导航页面,再次进入时直接进入主页面 去除ActionBar
- POJ
- 文本处理工具
- Nginx 源码阅读笔记8 epoll 模块
- 软件测试1
- 561. Array Partition I
- PAT1044 火星数字
- 洛谷p1902 二分答案 +bfs