不用加减乘除做加法
来源:互联网 发布:部落战争mac电脑版 编辑:程序博客网 时间:2024/06/05 02:36
对于num1+num2可分为三步完成:
(1)对num1与num2做二进制相加,不计进位(这一步可用异或实现);
(2)记录进位(可用位与运算,因为相同位都为1,才会向前产生进位;即得到进位的方法为(num1&num2)<<1);
(3)把(1)与(2)的结果相加,方法同上,直到不再产生进位,即可得到结果;
由于不能使用加减乘除,那么我们可以试着考虑位操作对两数进行运算:
如:num1=5,num2=17,两者相加结果为22;若采用上述方法,则相加步骤如下:
两数的二进制值分别为:num1=101,num2=10001.
(1)101^10001=10100(不计进位);
(2)101&10001=00001,因为是向前进位,所以进位后为;(00001)<<1=10;
(3)把(1)与(2)相加得:10100^10=10110=22,未产生进位,所以10110即为最终结果;
代码实现:
int Add(int num1, int num2){int sum = 0;int carry = 0;//进位do{sum = num1^num2; //两数二进制异或结果carry = num1&num2;//两数相与产生的进位//求sum+carry的结果num1 = sum; //sum作为新的加数num1;num2 = carry;//carry作为新的加数num2;} while (num2 != 0);return num1;//即为最终结果}
0 0
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- MySQL 数据库主从复制架构
- 参考别人的分析对于Volley的理解(三)
- Android 操作数据库Sqlite,数据写入到SD卡里面
- Spring事务异常回滚,捕获异常不抛出就不会回滚
- Problem H: 今年第几天?
- 不用加减乘除做加法
- Android 加载图片传到另一个页面 关于回调
- [BZOJ1602][Usaco2008 Oct]牧场行走(LCA)
- Redis 集群的合纵与连横
- SDAU课程练习2 1019
- DFS求起点到终点最短路径,手动输入地图,5行4列,地图如下,起点(1,1)终点(4,3) 1是障碍 0是通路
- hdoj 素数回文 1431 (模拟)
- E Cheerleaders (UVA 11806)
- 第五周项目22-分数类的雏形